2014-01-13 46 views
17

我有下面的代码来拉回来一个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?这个问题所建议的?

+1

看看这里:http://stackoverflow.com/questions/973260/what-size-do-you-use-for-varcharmax-in-your-parameter-declaration – Eugene

+0

它会更好地使用一种数据类型,自然支持存储多个单独的数据项目,而不是这个字符串。作为支持这两种类型的跳跃式表格本身(以每个项目单独行的形式)或XML。 –

回答

42

你这是怎么明确设置为nvarchar(最大):

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

如果你真的关心性能,你可能要考虑通过整数表: https://stackoverflow.com/a/10779593/465509

+0

你不是指SqlDbType.NVarChar? – Eugene

+0

那么它取决于你想要的数据类型。 VarChar和NVarChar都可以工作。一个nvarchar列可以存储任何Unicode数据。一个varchar列仅限于一个8位代码页。对于更多:http://stackoverflow.com/a/147302/465509 – Sam7

+0

你说你自己在上面的行,它是nvarchar(最大)是想要的,那么你为什么然后使用'SqlDbType.VarChar'? – robertc

相关问题