我有一个项目,该项目的类包含一些成员,这些成员的字符串等于“”。我的老师展示了一些示例,这些示例的Class成员声明为String =“ NULL”。我尝试插入SQL并收到以下消息:
错误插入...将数据类型varchar转换为数字时出错。
我知道很多人会建议使用参数化的值进行插入,但是我想完成开始的过程。
我尝试使用CDec,CInt,Cbit强制转换查询字符串对象值,但仍然不知道如何正确执行此操作,因为我尝试转换为“”时出现异常。
此外,我已经将成员的默认值更改为这样;
Dim NumberOfPackage As String = ""
代替;
Dim NumberOfPackage As String = "NULL"
SQL表中的某些列将ALLOW NULL复选框设置为NOT NOT,我更改了表的设计以使其易于插入。
答案 0 :(得分:1)
数据库中的字段已设置为非null?我认为dbnull.value可以满足您的要求
答案 1 :(得分:0)
要插入NULL值,它必须没有撇号,例如@RichBenner和@the_lotus状态:
Dim myCommand As String
myCommand = "INSERT INTO dbo.Foo (Foo_Text) VALUES (NULL);"
'The query for an empty string would look like this
myCommand = "INSERT INTO dbo.Foo (Foo_Text) VALUES ('');"
答案 2 :(得分:0)
我想我了解发生了什么事。您的变量NumberOfPackage包含数字,但是由于您想在某个时间插入NULL,因此将其设为字符串。
NumberOfPackage = "23"
NumberOfPackage = "NULL"
"INSERT INTO table (column) VALUES (" & NumberOfPackage & ");"
但是由于您使用字符串,因此您可能正在尝试
"INSERT INTO table (column) VALUES ('" & NumberOfPackage & "');"
这将导致NULL错误,因为您的列是一个数字并且正在尝试这样做
"INSERT INTO table (column) VALUES ('NULL');"
如果您真的想连接字符串,请粘上我的第一个示例(不带'),但是如果使用参数,一切将变得更加容易。通过使用参数,将NumberOfPackage保留为小数还是小数会更容易?并用它做适当的数学。
答案 3 :(得分:0)
col1是int数据类型,允许为null。这就是使用Parameters完成的方式。 TextBox1将包含软件包数,而TextBox2将包含名称。我使用了对象数据类型,因此它可以容纳DBNull.Value或Integer。
Private Sub InsertRecord()
Dim myValue As Object
Dim myInt As Integer
If Integer.TryParse(TextBox1.Text, myInt) Then
myValue = myInt
Else
myValue = DBNull.Value
End If
Using cn As New SqlConnection(My.Settings.BuildersConnectio)
Using cmd As New SqlCommand("Insert Into Builders (BuilderName, col1) VALUES (@Name, @NoOfPackages);", cn)
cmd.Parameters.Add("@Name", SqlDbType.VarChar, 100).Value = TextBox2.Text
cmd.Parameters.Add("NoOfPackages", SqlDbType.Int).Value = myValue
cn.Open()
cmd.ExecuteNonQuery()
End Using
End Using
End Sub