如何在C#中创建NVarchar(max)Sql参数?

时间:2014-01-13 09:41:22

标签: c# sql nvarchar sqlparameter

我有以下代码使用存储过程撤回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?中建议的潜在性能问题?

1 个答案:

答案 0 :(得分:65)

这是你明确设置nvarchar(max):

的方法
cmd.Parameters.Add("@JobNumbers", SqlDbType.NVarChar, -1);

如果您真的关心性能,可能需要考虑传递一个整数表: https://stackoverflow.com/a/10779593/465509