【问题标题】:Error writing to SQL Database when user leaves field blank当用户将字段留空时写入 SQL 数据库时出错
【发布时间】:2012-10-15 23:47:46
【问题描述】:

我正在创建一个 Windows 表单,每当我们添加新员工时,用户都会填写该表单。如果我完整填写表格,我可以写入数据库,但如果一个字段留空,我会收到错误消息。在 SQL 表中,所有行都设置为允许空值,我可以通过 SQL Server Management Studio 插入空值,没有任何问题。

为简洁起见,我遗漏了十几个字段,但如果我将这段代码替换为我正在使用的代码,则会出现同样的错误。

Dim DBConnection As New SqlClient.SqlConnection
Dim cmd As New SqlClient.SqlCommand
Try
WOWConnection.ConnectionString = "Server=MyServerName;Database=Employee Database;Trusted_Connection=TRUE;"
WOWConnection.Open()
cmd.Connection = WOWConnection
cmd.CommandText = "INSERT INTO [dbo].[Employees]([FirstName],[LastName]) VALUES (@FirstName,@LastName)"
cmd.Parameters.AddWithValue("@FirstName", Me.EMP_FirstName.Text)
cmd.Parameters.AddWithValue("@LastName", Me.EMP_LastName.Text)
cmd.ExecuteNonQuery()
MsgBox("Sucess!")
Catch ex As Exception
MsgBox("error")
Finally
DBConnection.Close()
End Try

如何处理在 Windows 窗体上留空的字段?

【问题讨论】:

  • 实际错误是什么?
  • 它遇到了我的异常并弹出了我的“错误”消息框。我没有看到实际错误。调试器返回以下内容: System.Data.dll 中发生“System.Data.SqlClient.SqlException”类型的第一次机会异常线程“vshost.RunParkingWindow”(0x994)已退出,代码为 0(0x0)。线程“”(0x1094) 已退出,代码为 0 (0x0)。程序“[7356] HR.vshost.exe: Managed (v4.0.30319)”已退出,代码为 0 (0x0)。
  • 更改您的 catch 处理程序以显示异常!
  • MsgBox("error") 更改为MsgBox(ex.Message)
  • 我看不出您的代码有任何本质上的错误。是否存在阻止空名称字段的数据库约束?

标签: sql vb.net visual-studio-2010


【解决方案1】:

在将值传递给 SQL 之前测试插入的值。 注意SQL中NULL值和Empty是不一样的。

cmd.CommandText = "插入 [dbo].Employees 值 (@FirstName,@LastName)"

If Not string.IsNullOrEmpty(Me.EMP_FirstName.Text) Then

      cmd.Parameters.AddWithValue("@FirstName", Me.EMP_FirstName.Text)

其他

      cmd.Parameters.AddWithValue("@FirstName", DBNull.Value)

如果结束

cmd.ExecuteNonQuery()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多