.NET SqlParameter类:它会截断.Value字符串吗?

时间:2018-03-23 19:41:00

标签: c# sql-server tsql

使用.NET文档中的示例:

private static void AddSqlParameter(SqlCommand command, string paramValue)
{
    SqlParameter parameter = new SqlParameter("@Description", SqlDbType.VarChar, 88);
    parameter.IsNullable = true;
    parameter.Direction = ParameterDirection.Output;
    parameter.Value = paramValue;

    command.Parameters.Add(parameter);
}

如果相应的存储过程有DECLARE @Description varchar(100)且表本身的列Description设置为VARCHAR(100),那么当paramValue长度为100个字符时会发生什么? SqlParameter.Value在绑定/执行SQL Server存储过程之前是否会截断?

1 个答案:

答案 0 :(得分:3)

因此,无论这是否能准确回答您的问题,这都是我找到的。

SqlParameter对象包含全长字符串(即使您已指定它的长度为88个字符)。这是有道理的,因为如果它没有,你事后改变了,你就会丢失数据。另外,这是C#管理的不必要的开销,所以如果这种截断是自愿的,我会感到惊讶。

虽然查看查询计划,但ParameterCompiledValue是截断的版本。所以它发生在那里之间(我猜想当SqlClient库将SqlCommand对象转换为对数据库运行的实际TSQL语句时)。

如果您的应用程序比数据库更具限制性,那么什么都不会爆炸。但它尊重您对SqlParameter施加的大小限制,无论数据库可以合理地保留什么。