1
votes

Comment diviser une colonne jointe en ses colonnes séparées et utiliser les données? (VB.Net + SQL Management Studio)

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?


2 commentaires

Je ne comprends pas ce que SSMS a à voir avec cela.


Doit avoir ajouté cette balise par accident. Je vais le supprimer.


3 Réponses :


2
votes
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 & "')"

2 commentaires

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.



0
votes

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


0 commentaires

0
votes

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


0 commentaires