您在参数声明中为varchar(MAX)使用什么大小?


190

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

但是,如果该列是VARCHAR(MAX)多少,该使用什么尺寸?

cmd.Parameters.Add("@blah", SqlDbType.VarChar, ?????).Value = blah;

Answers:


288

在这种情况下,您使用-1。


5
将所有参数长度设置为-1是否有性能上的缺点,所以我不必维护数据库匹配列表?
Andrew Bullock 2014年

1
对于小于8000字节的值,Varchar(max)与varchar(8000)相同。对于较大的值,该字段被视为“文本”字段(也称为“ CLOB”)。这会影响查询计划的优化以及检索此列中具有较大值的行的效率,因为数据是“行外”存储的,需要进行额外的查找。
KeithS 2015年

在SQL中使用nvarchar(max),并在c#中使用SqlDbType.NVarchar定义长度-1
Romil Kumar Jain

如果不是下面的Sam Meshesha的答案-我会想念您的答案。如果您将示例代码行设置为代码格式,则您的答案可能会获得更多投票。
qxotk

51

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

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

2

SqlDbType.VarChar的最大大小为2147483647。

如果您将使用通用的oledb连接而不是sql,我在这里还发现了LongVarChar数据类型。其最大大小为2147483647。

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

1

您不需要传递size参数,只需声明Varchar已经了解到它是MAX即可:

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

1
由于执行计划的计算方式,这可能会对您的SQL Server产生负面影响。
yaakov

我发现使用输出参数时并非如此。它导致以下错误`异常:字符串[2]:大小属性具有0.`无效大小要解决这个问题,使用尺寸= -1看到stackoverflow.com/questions/21087950/...
迈克尔ķ

1

如果您执行以下操作:

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

大小将取自“一些大文本”。长度

当它是输出参数时,返回的字符数少于您输入的字符数,这可能会出现问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.