[英]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.