从ADO.NET中的OdbcCommand Parameters集合生成SQL代码

时间:2014-06-12 07:13:00

标签: sql ado.net odbc

当我创建OdbcCommand并添加参数时,VarChar 4000的参数将在生成的sql中转换为文本类型。我的示例代码是:

OdbcConnection dbConnection = new OdbcConnection("DSN=database;UID=uid;PWD=pwd;");
try
{
    dbConnection.Open();
    OdbcCommand odbcCommand = new OdbcCommand();
    odbcCommand.CommandText = "UPDATE Table SET Notes = ? WHERE Notes = ?";
    odbcCommand.Connection = dbConnection;
    odbcCommand.Parameters.Add("", OdbcType.VarChar, 3999, "");
    odbcCommand.Parameters.Add("", OdbcType.VarChar, 4000, "");
    odbcCommand.Parameters[0].Value = "0";
    odbcCommand.Parameters[1].Value = "1";
    odbcCommand.ExecuteNonQuery();
}
finally
{
    dbConnection.Close();
}

这是我从SQL Server Profiler

获取的生成的SQL
exec sp_executesql N'UPDATE Table SET Notes = @P1 WHERE Notes = @P2',N'@P1 varchar(3999),@P2 text','0','1'

即使MSDN没有说明VarChar here的最大大小。有谁知道为什么会这样,如果这是可配置的?
我认为它是特定于OdbcCommand的东西,因为正确生成了简单数据为SQL Server数据库中存储为varchar(4000)的其他字段生成的更新SQL语句。

1 个答案:

答案 0 :(得分:0)

具有4000字节的VARCHAR会将stringsize转换为extented,这将返回文本。

如果MAX_STRING_SIZE = EXTENDED

,则为32767字节 如果MAX_STRING_SIZE = STANDARD

,则

4000字节

我认为你不能改变它......所以如果你能发布你想要完成的东西;这将是有帮助的