【发布时间】:2015-04-17 12:28:34
【问题描述】:
我已经在 VB.Net 中编写了几个月,并且在我的代码中多次成功使用 SQL 命令,但是在写入数据库中的一个特定表时遇到了麻烦。我相信问题在于我有一个我正在尝试写入的数字列(我得出这个结论是因为它是我唯一不经常使用的列)并且我的代码不断出现异常:附加信息:SqlCommand.Prepare 方法要求所有可变长度参数具有显式设置的非零大小。代码:
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 个使用这种格式的其他查询。我宁愿不使用浮点数写入数字字段,但我第一次启动此代码时它就工作了(从那时起就没有一次)。
【问题讨论】:
-
对于那些想知道我有为整个班级声明的连接字符串的人,因为我只写到这个程序上的一个服务器。它变暗:Server=Server;uid=User;pwd=Password;database=Example
-
我已经有一段时间没有做过很多 SQL 了,但我认为您不需要提供 Int 或 DateTime2 参数的长度。试着把长度拿出来看看它是否有效?
-
首先 - 我建议您在 using 语句中确定您的连接范围等。第二 - 尝试只为参数做 AddWithValue (msdn.microsoft.com/en-us/library/…) 并放弃准备(至少现在为了保持简单)。如果链接中的代码示例有效,您就知道您的连接工作。最后添加一个 try/catch 以便在失败时轻松查看异常。
-
我尝试了 AddWithValue 方法,它导致了同样的错误。
-
您是否尝试过在
command.Parameters.Add()命令中不提供大小?
标签: sql-server vb.net