2013-03-15 117 views
1

我想创建一个应用程序,我可以注册人员信息。 但我更新/编辑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()

+0

当你得到错误时''connectionString'的值是什么? – 2013-03-15 05:27:19

+0

指向cnn.open() – 2013-03-15 05:35:38

+0

'connectionString'在那一点的价值是什么?这是你想要的吗? – 2013-03-15 05:36:43

回答

1

我不知道究竟是错的,我可以只是想象一下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][email protected] WHERE [ID][email protected];" 
       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 

如果您将连接字符串设置为只读属性,假设它没有'当你使用它时,你不必担心它是否有价值。然后,所有你必须担心的是确保连接字符串是正确的。

请注意,我没有测试过这个代码,但它应该按我的想法工作。

+0

我试试看。没有什么变化发生它显示相同的错误[InvalidOperationExeption被解开 connectionString属性尚未初始化] – 2013-03-16 03:16:55

+0

你已经验证,当初始化连接时'connectionString'不是null?正在开发32位还是64位? – 2013-03-16 05:08:09

+0

我使用32位。感谢修改我的代码。它工作。我不知道该说什么,我很高兴。非常感谢您为帮助我做出这样的努力。 – 2013-03-18 01:29:46