Странная проблема с сохранением в базу данных SQL - PullRequest
0 голосов
/ 29 февраля 2012

Мне удалось создать соединение с базой данных, и я могу сохранить в нее информацию из своей формы, форма содержит 22 текстовых поля, кнопку сохранения и еще одну кнопку выхода.

Я установил форму для извлечения данных в form_load.Я использовал команду SQL «UPDATE» для кнопки «Сохранить», и она сохраняет данные во всех 22 текстовых полях (все текстовые поля связаны с отдельными столбцами).Но потребуется только одна запись, поэтому я не использовал команду «INSERT».

Проблема возникает, когда я нажимаю кнопку «Сохранить», все (19) текстовые поля сохраняются, но когда я получаю текст (путем перезагрузки формы) каждое из 20, 21, 22 текстовых полей (только) текст 20-го текстового поля продолжает перемещаться в следующее текстовое поле, например, 20> 21> 22> 20> 21> 22 взаимозаменяются между собой.

Пожалуйста, помогите мне (я гуглил это, но ничего не нашел по этому поводу) и, пожалуйста, скажите мне, почему это происходит.

Код ниже:

Dim sqCon As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;Database=MegaDatabase;Integrated Security=SSPI")
    Dim sqCmd As New SqlClient.SqlCommand

    sqCmd.Connection = sqCon

    Dim DatabaseErrorMsg As String = "Unable to save the details. Please contact the program developers."
    Dim DatabaseErrorTitle As String = "Database Editing Error"
    Dim DatabaseDoneSave As String = "New records made/updated successfully"

    Dim CompNmtxtS As String
    Dim TrdNmtxtS As String
    Dim ComRegtxtS As String
    Dim WTNmtxtS As String
    Dim VRegtxtS As String
    Dim TextBox1S As String
    Dim ComPosttxtS As String
    Dim StrAddrtxtS As String
    Dim ComCitytxtS As String
    Dim ComCounttxtS As String
    Dim RegAddrtxtS As String
    Dim ComZiptxtS As String
    Dim RepTeltxtS As String
    Dim ComFaxtxtS As String
    Dim RepCelltxtS As String
    Dim W_URLtxtS As String
    Dim EWebtxtS As String
    Dim BankNametxtS As String
    Dim BankBranchtxtS As String
    Dim BraCodetxtS As String
    Dim BankAcctxtS As String
    Dim TextBox2S As String
    CompNmtxtS = CompNmtxt.Text
    TrdNmtxtS = TrdNmtxt.Text
    ComRegtxtS = ComRegtxt.Text
    WTNmtxtS = WTNmtxt.Text
    VRegtxtS = VRegtxt.Text
    TextBox1S = TextBox1.Text
    ComPosttxtS = ComPosttxt.Text
    StrAddrtxtS = StrAddrtxt.Text
    ComCitytxtS = ComCitytxt.Text
    ComCounttxtS = ComCounttxt.Text
    RegAddrtxtS = RegAddrtxt.Text
    ComZiptxtS = ComZiptxt.Text
    RepTeltxtS = RepTeltxt.Text
    ComFaxtxtS = ComFaxtxt.Text
    RepCelltxtS = RepCelltxt.Text
    ComFaxtxtS = ComFaxtxt.Text
    W_URLtxtS = W_URLtxt.Text
    EWebtxtS = EWebtxt.Text
    BankNametxtS = BankNametxt.Text
    BankBranchtxtS = BankBranchtxt.Text
    BraCodetxtS = BraCodetxt.Text
    BankAcctxtS = BankAcctxt.Text
    TextBox2S = TextBox2.Text
    Try

        '*NOTE: UPDATE function will only UPDATE the fields when there is already something in there, as it cannot work for the INSERT command
    'Format for UPDATE command: USE DatabaseName; UPDATE Tablename SET ColumnName = '" & declared string name & "'"
        sqCmd.CommandText = ("USE MegaDatabase; UPDATE CompDetails SET CompName = '" & CompNmtxtS & "', TradeName = '" & TrdNmtxtS & "', CompReg = '" & ComRegtxtS & "', WTnum = '" & WTNmtxtS & "', VATregNo = '" & VRegtxtS & "', TaxPeriod = '" & TextBox1S & "', CompPostalAddr = '" & ComPosttxtS & "', CompPhysAddr = '" & StrAddrtxtS & "', CompCity = '" & ComCitytxtS & "', CompCountry = '" & ComCounttxtS & "', CompProvince = '" & RegAddrtxtS & "', CompZip = '" & ComZiptxtS & "', CompTel = '" & RepTeltxtS & "', CompFax = '" & ComFaxtxtS & "', CompCell = '" & RepCelltxtS & "', CompWebsite = '" & W_URLtxtS & "', CompEmail = '" & EWebtxtS & "', CompBankName = '" & BankNametxtS & "', CompBranchName = '" & BankBranchtxtS & "', CurrentTaxTable = '" & TextBox2S & "', CompBranchCode = '" & BraCodetxtS & "', CompAccNo = '" & BankAcctxtS & "'")

    sqCon.Open()
    sqCmd.ExecuteNonQuery()
        sqCon.Close()
    Catch ex As Exception
        MessageBox.Show(DatabaseErrorMsg, DatabaseErrorTitle, MessageBoxButtons.OK)
    Finally
        Me.Close()
        frmMDImainform.MainMenuStrip.Enabled = True
        MessageBox.Show(DatabaseDoneSave, "Done Saving...", MessageBoxButtons.OK)
    End Try

Для части загрузки:

     Try
        sqCmd.CommandText = "SELECT TOP 1 [CompName],[TradeName],[CompReg],[WTnum],[VATregNo],[TaxPeriod],[CompPostalAddr],[CompPhysAddr],[CompCity],[CompCountry],[CompProvince],[CompZip],[CompTel],[CompFax],[CompCell],[CompWebsite],[CompEmail],[CompBankName],[CompBranchName],[CurrentTaxTable],[CompBranchCode],[CompAccNo] FROM [MegaDatabase].[dbo].[CompDetails]"
        sqCon.Open()
        sqRdr = sqCmd.ExecuteReader()
    Catch ex As Exception

    End Try



Do While sqRdr.Read() 'No need for VbTab and Vb crlf
            CompNmtxt.Text = CompNmtxt.Text & sqRdr.GetValue(0)
            TrdNmtxt.Text = TrdNmtxt.Text & sqRdr.GetValue(1)
            ComRegtxt.Text = ComRegtxt.Text & sqRdr.GetValue(2)
            WTNmtxt.Text = WTNmtxt.Text & sqRdr.GetValue(3)
            VRegtxt.Text = VRegtxt.Text & sqRdr.GetValue(4)
            TextBox1.Text = TextBox1.Text & sqRdr.GetValue(5)
            ComPosttxt.Text = ComPosttxt.Text & sqRdr.GetValue(6)
            StrAddrtxt.Text = StrAddrtxt.Text & sqRdr.GetValue(7)
            ComCitytxt.Text = ComCitytxt.Text & sqRdr.GetValue(8)
            ComCounttxt.Text = ComCounttxt.Text & sqRdr.GetValue(9)
            RegAddrtxt.Text = RegAddrtxt.Text & sqRdr.GetValue(10)
            ComZiptxt.Text = ComZiptxt.Text & sqRdr.GetValue(11)
            RepTeltxt.Text = RepTeltxt.Text & sqRdr.GetValue(12)
            ComFaxtxt.Text = ComFaxtxt.Text & sqRdr.GetValue(13)
            RepCelltxt.Text = RepCelltxt.Text & sqRdr.GetValue(14)
            W_URLtxt.Text = W_URLtxt.Text & sqRdr.GetValue(15)
            EWebtxt.Text = EWebtxt.Text & sqRdr.GetValue(16)
            BankNametxt.Text = BankNametxt.Text & sqRdr.GetValue(17)
            BankBranchtxt.Text = BankBranchtxt.Text & sqRdr.GetValue(18)
            BraCodetxt.Text = BraCodetxt.Text & sqRdr.GetValue(19)
            BankAcctxt.Text = BankAcctxt.Text & sqRdr.GetValue(20)
            TextBox2.Text = TextBox2.Text & sqRdr.GetValue(21)
        Loop

Спасибо за чтение

1 Ответ

1 голос
/ 29 февраля 2012

У вас есть смешение в порядке столбцов в вашем запросе по сравнению с доступом к столбцам по индексу при чтении набора результатов:

В столбце вашего запроса № 21 (последний столбец, индекс на основе нуля) есть[CompAccNo] но при чтении вы присваиваете столбец № 21 TextBox2.Text.

Я бы посоветовал вам получить доступ к столбцам по имени при чтении:

CompNmtxt.Text = CompNmtxt.Text & sqRdr.GetValue("CompName")
TrdNmtxt.Text = TrdNmtxt.Text & sqRdr.GetValue("TradeName")
ComRegtxt.Text = ComRegtxt.Text & sqRdr.GetValue("CompReg")
'...

Еще один момент: избавитьсясоздания запроса на обновление путем объединения ввода пользователя - вместо этого используйте Параметры команды !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...