Как разбить объединенный столбец на отдельные столбцы и использовать данные?(VB.Net + SQL Management Studio) - PullRequest
0 голосов
/ 11 февраля 2019

Это будет немного сложно объяснить, но я постараюсь разбить его.Обратите внимание, что это создается с использованием VB.Net 2003.

У меня есть веб-страница, которая требует, чтобы пользователь вводил данные для сохранения в SQL.Они должны заполнить:

Course: {Select via drop-down table}  \\ Variable name = Crse

Emp No: {Manually type the number}    \\ Variable name = Emp

. Для выпадающего списка для курса данные получены из таблицы SQL "курс" со столбцами:

| Course Code | Course Title |

один разПосле завершения ввода я могу сохранить запись в своей таблице Emp_Course на SQL с помощью запроса:

Dim updateState As String = "insert into EMP_COURSE" _
                          & "(Employee_No, CourseCode)" _
                          & "values('" & Emp.Text & "', " _
                          & "'"Crse.SelectedItem.ToString & "')"

Ранее в раскрывающемся списке требовалось только показать код курса, но теперь мне нужно добавить его.Название курса также.Еще одна вещь, на которую следует обратить внимание: код курса не имеет фиксированной длины.

Drop-down list sample:

  Before:
          A001
          BX003

  After:
          A001 - Course A
          BX003 - Course BX

Это означает, что я должен изменить логику при заполнении раскрывающегося списка:

Dim list As New SqlCommand("select CourseCode + ' - ' " _
                         & "+ CourseTitle as Course from [SQL].[dbo].[Course] " _
                         & "order by CourseCode", SQLDB)

Теперь приходитмоя главная проблема, когда я хочу сохранить свою запись, программа, очевидно, выдает ошибку, потому что SQL по-прежнему ссылается только на код курса, а мой раскрывающийся список представляет собой гибрид кода + описание.

Так кактеперь я сделал свой выбор курса, как я должен добавить в свой SQL, чтобы обновить таблицу Emp_Course, чтобы сказать ей, чтобы выбрать часть кода курса моего гибридного выбора?

Я бы просто перейти к таблице курсаи просто добавьте новый столбец Code + Title и обратитесь к нему, но у меня нет полномочий изменять его, и мне нужно обойти это.

Какие-нибудь другие альтернативы я могу использовать?

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Комментарии и пояснения в строке.

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 голосов
/ 12 февраля 2019

Разделите значение и получите код курса, как показано в следующем коде.Надеюсь, это поможет.

    Dim Str = Crse.SelectedItem.ToString
    Dim strArr() As String
    strArr = Str.Split(CType("-", Char()))
    Dim CourseCode As String = strArr(0).Trim
0 голосов
/ 11 февраля 2019
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 & "')"
...