【问题标题】:VB.net to SQL Server INSERT checkbox resultsVB.net 到 SQL Server INSERT 复选框结果
【发布时间】:2017-09-08 18:36:41
【问题描述】:

我正在编写一个在 SQL Server 2012 中记录数据的 VB.net 程序。在这个阶段,我正在尝试在数据库中创建一个新行。主键自动创建 N+1 行,并输入新的序列号来创建行。前几天这一切都奏效了,除了您无法将该行加载到表单中以编辑其余数据,因为它在空值上绊倒了。

无论如何,我决定在创建新行时将空格“”加载到所有文本框中,将今天的日期加载到所有日期框中,并在所有复选框上返回“假”。我还添加了代码来检查空值。以下是将结果插入复选框的代码,但出现错误

'=' 附近的语法不正确

我的代码:

Private Sub btnAddNewSerial_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click, btnAddNewSerial.Click
    Try
        con.ConnectionString = (frmAdmin.lblDBConnection.Text & frmAdmin.txtDBPW.Text & frmAdmin.lblDBConnection2.Text)
        con.Open()

        cmd.Connection = con
        cmd.CommandText = "INSERT INTO SLE1000DB (SK2SoakMainPCB) " & _
"VALUES (@SK2SoakMainPCB)”
        cmd.Parameters.AddWithValue("@SK2SoakMainPCB", SqlDbType.Bit).Value = FrmSLE1000.chkSoakInteruptionsMainPCB.Checked

        cmd.ExecuteNonQuery()
        cmd.Parameters.Clear()

        con.Close()

        MsgBox("Data updated")
    Catch ex As Exception
        MessageBox.Show("Error while inserting record on table..." & ex.Message, "Insert Records")
    Finally
        con.Close()
    End Try

    Me.Hide()
    frmSelect.Show()
End Sub

因此,如果有人可以看到导致语法错误的原因,或者可以告诉我一种使复选框返回错误结果的更简洁的方法(我知道目前如果它确实有效,它将返回一个真实的结果,这就是我'我还在考虑)或者只是一个整体更整洁的方式来实现我的目标,这将不胜感激。我对 VB.net 和 SQL Server 的所有知识都来自一本书,因此很遗憾,非常有限!

这里提供的代码只是一个 sn-p,实际上我要向其传递数据的列要多得多,但我相信它是导致语法错误的复选框,因为没有任何 "= " 在这段代码中的其他任何地方,并在它被赶上的本节中使用一个步骤。

无论如何感谢您的帮助!

【问题讨论】:

  • 尝试调试了吗?你检查错误发生在哪里吗?你检查了实际的错误信息吗?您正在调用AddWithValue 并传递一个枚举成员 作为。枚举存储为整数。然后您尝试将 boolean 设置为该 integer 属性的值。
  • 你注意到你的命令文本的结束双引号不是真正的双引号吗?
  • 这不是你使用AddWithValue()的方式,第二个参数应该是值。但是,由于您无论如何都会立即覆盖它,这不是您的实际问题,只是一个观察。

标签: sql-server vb.net checkbox


【解决方案1】:
Private Sub btnAddNewSerial_Click(sender As System.Object, e As 
System.EventArgs) Handles btnAdd.Click, btnAddNewSerial.Click
    Try

      con.ConnectionString = (frmAdmin.lblDBConnection.Text & 
frmAdmin.txtDBPW.Text & frmAdmin.lblDBConnection2.Text)
      con.Open()
        cmd.Connection = con
        cmd.CommandText = "INSERT INTO SLE1000DB (SK2SoakMainPCB) VALUES (@SK2SoakMainPCB)"
        cmd.Parameters.AddWithValue("@SK2SoakMainPCB",FrmSLE1000.chkSoakInteruptionsMainPCB.Checked)
          cmd.ExecuteNonQuery()
          cmd.Parameters.Clear()
        con.Close()
        MsgBox("Data updated")
    Catch ex As Exception
        MessageBox.Show("Error while inserting record on table..." & ex.Message, "Insert Records")
    Finally
    con.Close()
    End Try

   Me.Hide()
  frmSelect.Show()
  End Sub

带值的 add 参数不正确。欲了解更多信息:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs.110).aspx

希望对你有帮助

【讨论】:

  • 智能引号还在,你认为为什么调用会导致语法错误?它确实传递了一个整数作为值。然后它尝试将其值设置为布尔值。这不会引发语法错误。这将导致强制转换或运行时错误
  • cmd.CommandText = "INSERT INTO SLE1000DB (SK2SoakMainPCB) VALUES (@SK2SoakMainPCB)" 你拼错了最后的报价。至于数据库中的值始终为真,您传递参数的方式不正确。addwithvalue 需要 2 个参数:sql 参数的名称和实际值
  • 史蒂夫在其他非回答中发布:And do not post answers when there is a simple typo unlikeky to be repeated by anyone. Comments are enough。有一条规则可以关闭只有错字的问题
  • 感谢你们的 cmets 伙计们。 Sapi-我看不到错字在哪里???我现在就去看看你的链接...
  • 当我输入我的代码 sn-p 时也出了点问题。参数行当前如下所示: cmd.Parameters.AddWithValue("@SK2SoakMainPCB", SqlDbType.Bit).Value = FrmSLE1000.chkSoakInteruptionsMainPCB.Checked
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多