【问题标题】:How to create NVarchar(max) Sqlparameter in C#? [duplicate]如何在 C# 中创建 NVarchar(max) Sqlparameter? [复制]
【发布时间】: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


【解决方案1】:

这是您明确设置 nvarchar(max) 的方式:

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

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

【讨论】:

  • 你的意思不是 SqlDbType.NVarChar 吗?
  • 这取决于你想要什么数据类型。 VarChar 和 NVarChar 都可以工作。 nvarchar 列可以存储任何 Unicode 数据。 varchar 列仅限于 8 位代码页。更多信息:stackoverflow.com/a/147302/465509
  • 您在上面一行中说自己需要的是 nvarchar(max),那么为什么要使用 SqlDbType.VarChar
  • 感谢您的关注。由于标题显示 NVarchar(max),我将其设为一致的 NVarchar。
猜你喜欢
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2010-09-26
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多