在程序中有一部分代码执行查询:
string SPROC = "#Some MSSQL Query#";
comm.CommandType = CommandType.Text;
comm.CommandText = SPROC;
comm.Parameters.Add(new SqlParameter("@Parameter1", SqlDbType.VarChar, 50)).Value = PARAM1;
comm.Parameters.Add(new SqlParameter("@Parameter2", SqlDbType.VarChar, 20)).Value = PARAM2;
comm.CommandTimeout = CurrentSettings.SQLTimeout;
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(comm);
DataSet TempDS = new DataSet();
adapter.Fill(TempDS);
数据集(TempDS
)表应该有大约20000条记录(行数),但在程序内部,它只是在调试模式下只有20条记录。
我在同一个数据库表上单独运行脚本,该表在SQL Server连接字符串中使用,但在SQL Server Management Studio中,它返回了20000条记录。
该脚本看起来像是:
Select
[Table1].Column1,[Table2].Column1
From
[Table1]
Inner Join
[Table2] on ([Table2].Column1 = [Table1].Column2)
Where
[Table2].Column1 = @Parameter1
and ([Table1].Column1 in (Select * from dbo.Split(@Parameter2,','))
它是相同的脚本文本,代码也会执行。
有没有人知道为什么程序代码只带回部分记录,而SQL Server Management Studio中的脚本会返回所有记录?
P.S。我还检查了SQLTimeOut并将其设置为240,因此有足够的时间正确返回记录。 @ Parameter1和@ Parameter2是字符串变量。
string PARAM1 = "Random1"; //in C#
string PARAM2 = "Random2,Random3,Random4,Random5"; //in C#
@Parameter1 = PARAM1
@Parameter2 = PARAM2
答案 0 :(得分:2)
string的值超出了C#
中的参数长度string PARAM2 = "Random2,Random3,Random4,Random5"; //in C#
comm.Parameters.Add(new SqlParameter("@Parameter2", SqlDbType.VarChar, 20)).Value = PARAM2;
所以你需要在这里分配更多的长度
尝试使用AddWithValue:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs.110).aspx
注意:如果这样做,还要注意输入的SPLIT功能;它可能需要调整到一些较大的值 - 搜索一些需要大量输入的分割函数