Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 错误:字符串“的转换”;声明@RepInt=";加倍是无效的_Sql Server_Vb.net - Fatal编程技术网

Sql server 错误:字符串“的转换”;声明@RepInt=";加倍是无效的

Sql server 错误:字符串“的转换”;声明@RepInt=";加倍是无效的,sql-server,vb.net,Sql Server,Vb.net,我有这个疑问 Dim count as integer = 4 Dim sql As String = " DECLARE @rep INT = " + count + "; " + _ " WITH cte AS " + _ " ( " + _ " SELECT TOP (@rep) " + _

我有这个疑问

 Dim count as integer = 4

 Dim sql As String = " DECLARE @rep INT = " + count + "; " + _
                            " WITH cte AS " + _
                        " ( " + _
                            " SELECT TOP (@rep) " + _
                                " ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS N " + _
                            " FROM sys.All_Columns ac1 " + _
                            " CROSS JOIN sys.ALL_Columns ac2 " + _
                        " ) " + _
                        " SELECT t.Barcode" + _
                        " FROM A_Documents t " + _
                        " CROSS JOIN cte " + _
                        " where idDocument = 'doc-123456' " + _
                        " ORDER BY t.Barcode desc; "
如果我输入一个没有var的数字,ist工作:

Dim sql As String = " DECLARE @rep INT = 4; " + _
但当我把我的计数变量,是不是工作:

 Dim sql As String = " DECLARE @rep INT = " + count + "; " + _
并显示以下错误消息:

字符串“Declare@RepInt=”到double的转换无效


这是
+
运算符的预期行为

当您向其输入数字变量时,系统会尝试将所有其他对象转换为该数字类型以完成加法,因此出现异常

imho这是一个特性,因为它允许您准确地知道要连接的内容

解决方案:

Dim sql As String = " DECLARE @rep INT = " + count.ToString + "; " + _

这是
+
运算符的预期行为

当您向其输入数字变量时,系统会尝试将所有其他对象转换为该数字类型以完成加法,因此出现异常

imho这是一个特性,因为它允许您准确地知道要连接的内容

解决方案:

Dim sql As String = " DECLARE @rep INT = " + count.ToString + "; " + _

当您尝试添加字符串和数字时,它将尝试将字符串转换为数字。您可以改为使用
&
运算符,该运算符将非字符串的任何内容转换为字符串:

Dim sql As String = " DECLARE @rep INT = " & count & "; " + _

当您尝试添加字符串和数字时,它将尝试将字符串转换为数字。您可以改为使用
&
运算符,该运算符将非字符串的任何内容转换为字符串:

Dim sql As String = " DECLARE @rep INT = " & count & "; " + _

实际上,您不需要声明变量。您可以将其立即传递到
TOP(+count+
中。第二,考虑使用参数绑定而不是字符串连接。另外,如果您需要将convert
count
连接到string。再次感谢您的帮助,我不能勾选您的评论,因为这不是答案(不要紧,请在下面的答案上投票;)实际上,您不需要声明变量。您可以将其立即传递到
TOP(+count+
中。第二,考虑使用参数绑定而不是字符串连接。另外,如果您需要将convert
count
连接到string。再次感谢您的帮助,我不能勾选您的评论,因为这不是答案(不要紧,请在下面的答案上投票;)