我在VB.Net中写了几个月,并成功地在我的代码中多次使用了SQL命令,但在写入数据库中的某个特定表时遇到了麻烦。我相信问题在于我有一个数字列,我正在尝试写入(我得出了这个结论,因为它是我唯一不常使用的唯一一个),并且我的代码不断出现异常:Additional信息:SqlCommand.Prepare方法要求所有可变长度参数具有明确设置的非零大小。与代码:写入SQL的问题
Dim cn As System.Data.SqlClient.SqlConnection
Dim command As System.Data.SqlClient.SqlCommand
Dim VL1 As System.Data.SqlClient.SqlParameter
Dim VL2 As System.Data.SqlClient.SqlParameter
Dim VL3 As System.Data.SqlClient.SqlParameter
Dim VL4 As System.Data.SqlClient.SqlParameter
Dim commandText As String
cn = New System.Data.SqlClient.SqlConnection(ConnectStr)
cn.Open()
commandText = "INSERT INTO [dbo].[HourMeterLog]" _
+ "([MachineName],[TotalHours],[HLRD],[DateTime])" _
+ "VALUES (@VL1,@VL2,@VL3,@VL4)"
command = New System.Data.SqlClient.SqlCommand(commandText, cn)
VL1 = command.Parameters.Add("@VL1", System.Data.SqlDbType.NVarChar, 25)
VL2 = command.Parameters.Add("@VL2", System.Data.SqlDbType.Float)
VL3 = command.Parameters.Add("@VL3", System.Data.SqlDbType.Int, 10)
VL4 = command.Parameters.Add("@VL4", System.Data.SqlDbType.DateTime2, 0)
command.Prepare()
VL1.Value = "MachineName"
VL2.Value = 0
VL3.Value = 735562
VL4.Value = Now()
command.ExecuteNonQuery()
cn.Close()
我知道我的代码连接,因为我有至少15个其他查询使用这种格式。我宁愿不使用float来写入数值字段,但是我第一次启动此代码(从此以后不再使用)就可以工作。
对于那些谁想知道我有连接字符串为全班声明,因为我只写入这个程序的一台服务器。它是灰暗的:服务器=服务器;用户=用户; pwd =密码;数据库=示例 – ARidder101
已经有一段时间,因为我做了很多的SQL,但我不认为你需要提供Int或DateTime2参数的长度。尝试一下,看看它是否有效? – GoldieLocks
首先 - 我建议你在使用语句时规定你的连接等。第二 - 尝试只是为参数做AddWithValue(https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue%28v=vs.110%29.aspx),并放下准备(至少现在让事情变得简单)。如果链接中的代码示例有效,则您知道您的连接工作。最后添加一个try/catch,以便在失败时很容易看到异常。 –