【发布时间】:2014-01-13 09:41:21
【问题描述】:
我有以下代码使用存储过程拉回 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? 中所建议的潜在性能问题?
【问题讨论】:
-
最好使用自然支持存储多个单独数据项的数据类型,而不是这个字符串。支持这些的两种类型是表本身(以每个项目的单独行的形式)或 XML。
标签: c# sql nvarchar sqlparameter