Cela va être un peu difficile à expliquer mais je vais essayer de le décomposer. Notez que cela est créé à l'aide de VB.Net 2003.
J'ai une page Web qui oblige l'utilisateur à saisir des données à enregistrer dans SQL. Ils doivent remplir:
Dim list As New SqlCommand("select CourseCode + ' - ' " _ & "+ CourseTitle as Course from [SQL].[dbo].[Course] " _ & "order by CourseCode", SQLDB)
Pour la liste déroulante de Course, les données sont obtenues à partir d'une table SQL 'Course', avec les colonnes:
Drop-down list sample: Before: A001 BX003 After: A001 - Course A BX003 - Course BX
Une fois la saisie terminée, je peux ensuite enregistrer l'entrée dans ma table Emp_Course en SQL en utilisant la requête:
Dim updateState As String = "insert into EMP_COURSE" _ & "(Employee_No, CourseCode)" _ & "values('" & Emp.Text & "', " _ & "'"Crse.SelectedItem.ToString & "')"
Auparavant, le drop- down list n'avait besoin que du code du cours de l'émission, mais maintenant je suis obligé d'ajouter également le titre du cours. Une autre chose à souligner est que le code du cours n'a pas de longueur fixe.
| Course Code | Course Title |
Ce qui signifie que je dois changer la logique en remplissant la liste déroulante:
XXX
Vient maintenant mon problème principal, lorsque je veux sauvegarder mon entrée, le programme donne évidemment une erreur car le SQL se réfère toujours au code du cours uniquement, alors que ma liste déroulante est un code + Description hybride.
Alors depuis que j'ai fait ma sélection de cours, comment suis-je censé ajouter à mon SQL pour mettre à jour la table Emp_Course pour lui dire de sélectionner la partie Course Code de ma sélection hybride?
Je voudrais simplement aller à la table Course et ajouter simplement une nouvelle colonne Code + Titre et y faire référence, mais je n'ai aucune autorité pour la modifier et je dois contourner cela.
Y a-t-il d'autres alternatives que je peux utiliser?
3 Réponses :
Dim arr As String() = Crse.SelectedItem.ToString().Split(New Char() {"-"c}) Dim courseCode AS String = Trim(arr(0)) Dim updateState As String = "insert into EMP_COURSE" _ & "(Employee_No, CourseCode)" _ & "values('" & Emp.Text & "', " _ & "'"courseCode & "')"
Veuillez commenter votre code, même s'il est explicite
Merci pour le code. Bien qu'il semble y avoir des problèmes lorsque le code du cours contient -
incorporé. Exemple: ERT-1234
. Maintenant, il lit simplement ERT et il ne peut pas trouver le titre de cours correspondant. Désolé, je n'ai pas soulevé cette question plus tôt. Je ne l'ai pas remarqué jusqu'à aujourd'hui.
Commentaires et explications en ligne.
Imports System.Data.SqlClient Public Class WebForm1 Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then Crse.DataSource = CreateDataSource() 'Course is the concatenated string returned from 'the database containing the CourseCode and the CourseTitle Crse.DataTextField = "Course" Crse.DataValueField = "CourseCode" Crse.DataBind() Crse.SelectedIndex = 0 End If End Sub Protected Function CreateDataSource() As DataTable Dim dt As New DataTable Using SQLDB As New SqlConnection("Your connection string") 'This selects the CourseCode as a separate column and the string called Course 'containing the CourseCode and the CourseTitle Using cmd As New SqlCommand("select CourseCode, CourseCode + ' - ' + CourseTitle as Course from [SQL].[dbo].[Course] order by CourseCode", SQLDB) SQLDB.Open() dt.Load(cmd.ExecuteReader) End Using End Using Return dt End Function Protected Sub UpdateDatabase() Using SQLDB As New SqlConnection("Your connection string") Using cmd As New SqlCommand("insert into EMP_COURSE (Employee_No, CourseCode) values(@EmpNo, @CourseCode);", SQLDB) 'I guessed at the SqlDbType. Check the database for the real data types. cmd.Parameters.Add("EmpNo", SqlDbType.Int).Value = CInt(Emp.Text) 'Always use parameters to prevent SQL injection 'The SelectedValue will return the CourseCode cmd.Parameters.Add("@CourseCode", SqlDbType.VarChar).Value = Crse.SelectedValue SQLDB.Open() cmd.ExecuteNonQuery() End Using End Using End Sub Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click UpdateDatabase() End Sub End Class
Divisez la valeur et obtenez le code du cours comme dans le code suivant. J'espère que cela aide.
Dim Str = Crse.SelectedItem.ToString Dim strArr() As String strArr = Str.Split(CType("-", Char())) Dim CourseCode As String = strArr(0).Trim
Je ne comprends pas ce que SSMS a à voir avec cela.
Doit avoir ajouté cette balise par accident. Je vais le supprimer.