簡體   English   中英

無法更新/編輯數據庫

[英]having trouble updating/edit database

我想創建一個可以注冊個人信息的應用程序。 但我在更新/編輯gridview中的數據時遇到問題。 以下是我創建的代碼集。

Imports System.Data.SqlClient
Public Class Form1
Dim connectionString As String
Dim cnn As SqlConnection
Dim cmd As SqlCommand
Dim sql As String

下面是我的ADD語句,它工作正常

Private Sub btnADD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnADD.Click

    connectionString = "Data Source=XXXX;Initial Catalog=XXXX;User ID=XXXX;Password=XXXX"
    cnn = New SqlConnection(connectionString)
    Try
        cnn.Open()
        cmd = New SqlCommand("INSERT INTO tbl_info (ID,Name) VALUES (@ID,@Name)")
        cmd.Connection = cnn
        With cmd.Parameters
            .AddWithValue("ID", txtID.Text)
            .AddWithValue("Name", txtName.Text)
        End With
        cmd.ExecuteNonQuery()
        MsgBox("has been inserted successfully")

    Catch ex As Exception
        MsgBox(ex.Message())
    End Try


    txtID.Clear()
    txtName.Clear()
End Sub

下面是gridview女巫是鏈接到我的數據庫

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'TODO: This line of code loads data into the 'TestDataSet.tbl_info' table. You can move, or remove it, as needed.
    Me.Tbl_infoTableAdapter.Fill(Me.TestDataSet.tbl_info)

End Sub

以下是我的更新聲明,女巫,我很難找出問題所在。

 Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
    cnn = New SqlConnection(connectionString)
    If Not cnn.State = ConnectionState.Open Then
        cnn.Open()
    End If

    Try
        cmd = New SqlCommand("Update tble_info set Name = @Name Where ID = @ID)")
        cmd.Connection = cnn
        With cmd.Parameters
            .AddWithValue("Name", txtName.Text)
            .AddWithValue("ID", txtID.Text)
        End With
        cmd.ExecuteNonQuery()
        MsgBox("has been update successfully")
    Catch ex As Exception
        MsgBox(ex.Message())
    End Try
   End Sub
End Class

這是我執行程序時遇到的錯誤

InvalidOperationExeption was unhadled
The connectionString property has not been initialize

它指向cnn.open()

我不確定到底是什么問題,我只能想象當您嘗試使用connectionStringI它會以某種方式為Null ,但是我認為這是每次使用完后都關閉連接的好習慣。

因此,當您獲取數據而不是像現在那樣打開連接時,請執行以下操作

With New SqlConnection(connectionString)
    Try
        .Open()
        ' Do Stuff
    Catch
        ' Handle your exception
    Finally
         .Close()
    End Try
End With

這樣,您的連接將始終處於關閉狀態,而您不必擔心檢查它是否已打開。

UPDATE

我已經采取了以自己的方式重寫代碼的自由。 您能不能嘗試一下,看看它是否適合您/

您連接字符串屬性:

Private ReadOnly Property connectionString As String
    Get
        Return "Data Source=XXXX;Initial Catalog=XXXX;User ID=XXXX;Password=XXXX"
    End Get
End Property

插入數據的子:

Private Sub btnADD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnADD.Click

    Dim transaction As SqlTransaction = Nothing

    With New SqlConnection(connectionString)
        Try
            Call .Open()
            transaction = .BeginTransaction()
            With .CreateCommand()
                .Transaction = transaction
                .CommandText = "INSERT INTO [tbl_info] ([ID], [Name]) VALUES (@ID,@Name);"
                With .Parameters
                    .AddWithValue("ID", txtID.Text)
                    .AddWithValue("Name", txtName.Text)
                End With
                Call .ExecuteNonQuery()
                Call transaction.Commit()
                Call MessageBox.Show("has been inserted successfully")
            End With
        Catch ex As Exception
            Call transaction.Rollback()
            Call MessageBox.Show(ex.Message, "Error")
        Finally
            Call .Close()
        End Try
    End With

    Call txtID.Clear()
    Call txtName.Clear()

End Sub

用來更新數據的子:

Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click

    Dim transaction As SqlTransaction = Nothing

    With New SqlConnection(connectionString)
        Try
            Call .Open()
            transaction = .BeginTransaction()
            With .CreateCommand()
                .Transaction = transaction
                .CommandText = "UPDATE [tble_info] SET [Name]=@Name WHERE [ID]=@ID;"
                With .Parameters
                    .AddWithValue("Name", txtName.Text)
                    .AddWithValue("ID", txtID.Text)
                End With
                Call .ExecuteNonQuery()
                Call transaction.Commit()
                Call MessageBox.Show("has been update successfully")
            End With
        Catch ex As Exception
            Call transaction.Rollback()
            Call MessageBox.Show(ex.Message, "Error")
        Finally
            Call .Close()
        End Try
    End With

End Sub

如果您將連接字符串設為(只讀)屬性,並假設它不變,那么您就不必擔心使用時它是否具有值。 然后,您只需要確保連接字符串正確即可。

請注意,我尚未測試此代碼,但它應該按我的想法工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM