2014-02-24 103 views
0

我已经与我的数据库问题,到目前为止的工作,我不能为我无法通过datagridview的更新命令中的datagridview数据库

有人可以检查更新我的数据库的原因一个新的模块进行在我的代码为什么我不能更新我的数据库在datagridview使用按钮单击?

这里就是我有我的DataGrid内容:

Public Sub loaddgvfrm3() 
    cmdconn = New SqlConnection 
    cmd = New SqlCommand 
    cmdconn.ConnectionString = sqlstr 
    cmdconn.Open() 
    cmd.Connection = cmdconn 
    cmd.CommandText = "select period, VOUCH_AMT, INDIVIDUAL_AMT, check_no, D_MAILED, DIR_NO, who_updated, claim_no, year_student from tobee.EBD_BILLHISTORY where CLAIM_NO like '" + txtClaimno.Text + "'" 
    'cmd.CommandText = "select a.period, a.VOUCH_AMT, a.INDIVIDUAL_AMT, a.check_no, a.bal_ent, a.D_MAILED, a.DIR_NO from tobee.EBD_BILLHISTORY a left join carlos.claims_waivee b on a.CLAIM_NO = b.claim_no where b.CLAIM_NO like '" + claimno.ToString + "'" 
    Dim dt As New DataTable 
    'Dim ds As New DataSet 
    da = New SqlDataAdapter 
    da.SelectCommand = cmd 
    da.Fill(dt) 
    Me.DataGridView1.DataSource = dt 
    Me.DataGridView2.DataSource = dt 
    cmdconn.Close() 
End Sub 

现在我想,我到数据库与buttonclick

这里做出的DataGridView和更新变化中修改某些行是我按一下按钮的代码:

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click 


    Dim connstr As String = "server=midtelephone\sqlexpress; database=testdb; user= sa; password=sa;" 
    Dim cmd2 As New SqlCommand 

    Try 
     Using connection As New SqlConnection(connstr) 
      connection.Open() 
      cmd2.CommandText = "update tobee.EBD_BILLHISTORY set [email protected], [email protected]_amt, [email protected]_amt, [email protected]_no, [email protected]_mailed, [email protected]_no, [email protected]_updated where claim_no = '" + txtClaimno.Text + "' " 

      cmd2.Parameters.Add("@period", SqlDbType.Char, 25, "period") 
      cmd2.Parameters.Add(New SqlParameter("@vouch_amt", SqlDbType.Decimal) With {.Precision = 18, .Scale = 2}).Value = "vouch_amt" 
      cmd.Parameters.Add(New SqlParameter("@individual_amt", SqlDbType.Decimal) With {.Precision = 18, .Scale = 2}).Value = "individual_amt" 

      cmd2.Parameters.Add("@check_no", SqlDbType.Char, 15, "check_no") 
      'cmd2.Parameters.Add("@d_mailed", SqlDbType.DateTime, "d_mailed") 
      cmd2.Parameters.Add("@dir_no", SqlDbType.Char, 15, "DIR_NO") 
      cmd2.Parameters.Add("@who_updated", SqlDbType.Char, 15, "who_updated") 
      cmd2.ExecuteNonQuery() 
      connection.Close() 
      MsgBox("changes done") 
      'MessageBox.Show("Updated Successfully!", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information) 

     End Using 
    Catch ex As Exception 
    msgbox(ex.message) 
    End Try 

End Sub 

出现的问题“的ExecuteNonQuery:连接属性尚未初始化” 可能是什么职业如果你有任何其他建议(更新)我在datagridview pls中所做的更改,我会不会知道mybutton保存的缺陷?(我不知道我是否正确地执行操作,是否将这两个“subs”正确连接?)。随意修改保存按钮:(

+0

将断点放入'Catch'块中,在调试模式下运行您的应用程序。如果它转到'Catch',深入'ex'以获取有关导致异常的信息。或者至少,在'Catch'块中放置'MessageBox.Show(“Something”)',以便在发生异常时得到通知。 – har07

+0

我得到了更新。 executenonquery:连接属性尚未初始化。那是错误。我的savebtn子是以某种方式连接到loaddgvfrm? :( –

+0

基于错误消息,似乎你错过了单行。检查我的答案:)关于第二个问题:不。鉴于所有在sub中声明的变量,两个subs都没有连接在任何地方 – har07

回答

1

看来你忘了设置的cmd2Connection属性只是connection.Open()后添加此行:

cmd2.Connection = connection 

UPDATE:

你可以试试使用DataAdapterUpdate()函数传递DataTable作为参数,以将更改从DataTable提交到数据库:

da.Update(dt); 

[MSDN Reference]

+0

我做过之前,但不知何故,我无法找到任何解决方案,如何链接loaddgv子和btnsave子。这就是我现在试图找到的。 –

+0

如果我明白你的意思*正确地链接* loaddgv sub和btnsave sub。我上面的更新意味着,您可以将DataTable(这是您的DGV的数据源)中的更改提交回数据库,将该行代码内部的btnsave子,并且给定'dt'是全局变量(在子外部声明),那么两个子*现在*链接*(针对同一个DataTable实例操作)。 – har07

+0

使用修改的行传递DataRow集合时,Update需要有效的UpdateCommand。那是新的错误 –