我有下面的代码来拉回来一个DataTable使用存储过程,并输入一个字符串参数@JobNumbers,这是动态创建的就业数字的字符串(因此长度未知):如何在C#中创建NVarchar(max)SqlParameter?
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?这个问题所建议的?
看看这里:http://stackoverflow.com/questions/973260/what-size-do-you-use-for-varcharmax-in-your-parameter-declaration – Eugene
它会更好地使用一种数据类型,自然支持存储多个单独的数据项目,而不是这个字符串。作为支持这两种类型的跳跃式表格本身(以每个项目单独行的形式)或XML。 –