我想创建一个可以注册个人信息的应用程序。 但我在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 witch链接到我的数据库
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()
答案 0 :(得分:1)
我不确定到底出了什么问题,我只能想象connectionStringI
在某种程度上Null
当你试图使用它时,我认为每个关闭连接都是好的做法。你完成它的时间。
因此,当您获取数据而不是像现在一样打开连接时,请执行类似
的操作With New SqlConnection(connectionString)
Try
.Open()
' Do Stuff
Catch
' Handle your exception
Finally
.Close()
End Try
End With
这样你的连接将永远关闭,你不必担心检查它是否已经打开。
更新
我冒昧地按照我的方式重写你的代码。你可以试一试,看看它是否适合你/
您连接字符串属性:
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
如果将连接字符串设置为(只读)属性,假设它没有更改,那么在使用它时,您不必担心它是否具有值。然后你需要担心的是确保连接字符串是正确的。
请注意,我没有测试过这段代码,但它应该像我想的那样工作。