我有以下代码使用存储过程撤回DataTable并输入字符串参数@JobNumbers,它是动态创建的作业编号字符串(因此长度未知):
using (SqlConnection connection = new SqlConnection(con))
{
SqlCommand cmd = new SqlCommand("dbo.Mystoredprocedure", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@JobNumbers", SqlDbType.VarChar, 4000);
cmd.Parameters["@JobNumbers"].Value = JobNumber;
SqlDataAdapter da = new SqlDataAdapter(cmd);
connection.Open();
da.Fill(JobDetails);
}
正如您所看到的,我当前将JobNumber参数设置为4000的长度,这应该足以容纳大约500个作业号并且应该足够了。但是,有可能在奇怪的场合需要更多。所以,我想知道,有没有办法将参数设置为nvarchar(max)的等效sql参数类型?
我已经看过各种类似的问题(What's the best method to pass parameters to SQLCommand?)但没有具体说明你是否可以(或不能)这样做。其次,如果我将存储过程中的@JobNumber参数设置为nvarchar(max),甚至需要这样做,因此我可能根本不需要在C#中设置长度?如果我执行此操作,则会出现此问题When should "SqlDbType" and "size" be used when adding SqlCommand Parameters?中建议的潜在性能问题?
答案 0 :(得分:65)
这是你明确设置nvarchar(max):
的方法cmd.Parameters.Add("@JobNumbers", SqlDbType.NVarChar, -1);
如果您真的关心性能,可能需要考虑传递一个整数表: https://stackoverflow.com/a/10779593/465509