如何在C#中创建NVarchar(max)的Sqlparameter?

44
我有以下代码,用于使用存储过程并输入字符串参数@JobNumbers来检索DataTable,@JobNumbers是动态创建的作业编号字符串(因此长度未知):

我有以下代码,用于使用存储过程并输入字符串参数@JobNumbers来检索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
请看这里:https://dev59.com/4nNA5IYBdhLWcg3wZ9DU - Eugene
最好使用自然支持存储多个独立数据项的数据类型,而不是使用字符串。支持这些的两种类型是表本身(以每个项目的单独行形式)或XML。 - Damien_The_Unbeliever
1个回答

99

你是不是想说SqlDbType.NVarChar? - Eugene
这取决于您想要什么数据类型。VarChar和NVarChar都可以使用。NVarChar列可以存储任何Unicode数据。VarChar列受限于8位代码页。更多信息请参见:https://dev59.com/xXVC5IYBdhLWcg3w7Vxq#147302 - Sam7
2
你在上一行中自己说要的是nvarchar(max),那么为什么你还使用了SqlDbType.VarChar - robertc
感谢您的关注。由于标题中提到了“NVarchar(max)”,我将统一使用“NVarchar”。 - Sam7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接