C# 在参数声明中,varchar(MAX)的大小是多少?

C# 在参数声明中,varchar(MAX)的大小是多少?,c#,sql-server-2008,ado.net,C#,Sql Server 2008,Ado.net,我通常在ADO.NET中创建参数时设置列大小 但是如果列是VARCHAR(MAX),我应该使用什么大小 在本例中,您使用-1。对于我们这些没有看到Michal Chaniewski的-1的人,完整的代码行: cmd.Parameters.Add("@blah",SqlDbType.VarChar,-1).Value = "some large text"; SqlDbType.VarChar的最大大小为2147483647 cmd.Parameters.Add("@blah", OleDbTy

我通常在ADO.NET中创建参数时设置列大小

但是如果列是
VARCHAR(MAX)
,我应该使用什么大小


在本例中,您使用-1。

对于我们这些没有看到Michal Chaniewski的-1的人,完整的代码行:

cmd.Parameters.Add("@blah",SqlDbType.VarChar,-1).Value = "some large text";

SqlDbType.VarChar的最大大小为2147483647

cmd.Parameters.Add("@blah", OleDbType.LongVarChar, -1).Value = "very big string";
如果使用通用的oledb连接来代替sql,我发现还有一个LongVarChar数据类型。其最大尺寸为2147483647

cmd.Parameters.Add("@blah", OleDbType.LongVarChar, -1).Value = "very big string";

您不需要传递size参数,只需声明
Varchar
已经知道它是MAX-like:

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

如果您这样做:

    cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";
大小将取自“一些大文本”。长度


当它是一个输出参数时,这可能会有问题,您不会返回更多字符,然后将其作为输入。

将所有参数长度设置为-1是否存在性能缺陷,因此我不必维护db匹配列表?对于小于8000字节的值,Varchar(max)与Varchar(8000)的处理方式相同。对于较大的值,该字段被视为“文本”字段(也称为“CLOB”)。这可能会影响查询计划优化和检索此列中具有较大值的行的效率,因为数据存储在“行外”,需要额外查找。在sql中使用nvarchar(max),并在c中使用SqlDbType.nvarchar定义长度-1。如果没有下面Sam Meshesha的答案,我可能会错过您的答案。如果将一行代码格式化为代码,您的答案可能会获得更多选票。由于执行计划的计算方式,这可能会对SQL server产生负面影响。我发现使用输出参数时并非如此。它会导致以下错误`Exception:String[2]:Size属性的大小无效为0。`若要解决此问题,请使用Size=-1。正如我今天发现的,这实际上很糟糕,因为SQL server每次都必须重新编译计划。在我们的例子中,它缓存了60000个计划用于一个简单的插入,因为我们不知道这一点。对于一个未设置大小的
SqlParameter
,我似乎遇到了一个例外,即使我指定了一个值-但是,我并没有使用
Add
的重载,而是自己创建
SqlParameter
实例。
的重载是否会将您正在使用的
添加到一些可能的内容?