将keyatable作为keyvaluepair对象中的值传递会截断字符串

时间:2017-03-20 13:12:35

标签: c# sql

在keyvaluepair中传递数据表作为对象时,如何防止数据库中的字符串被限制为4000个字符?在以下代码中,如果字符串是> 4000个字符,则不会将其写入数据库,但是调试会标识数据表中的列确实具有> 4000个字符串字符串:

conn.Open();

SqlCommand cmd = new SqlCommand(storedProcedureName, conn);
cmd.CommandType = CommandType.StoredProcedure;

// Handle the parameters 
if (args != null)
{
    foreach (KeyValuePair<string, object> arg in args)
    {
        SqlParameter param;
        param = new SqlParameter();                          
        param.ParameterName = "@" + arg.Key;
        param.Value = arg.Value; 
        cmd.Parameters.Add(param);
    }
}

SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;

// Fill the DataTable.                        
adapter.Fill(dt);

1 个答案:

答案 0 :(得分:1)

也许你必须明确地将参数类型设置为SqlDbType.NVarChar

param.SqlDbType = SqlDbType.NVarChar; 

引自MSDN

  

NVarChar:String。可变长度的Unicode字符流   范围在1到4,000个字符之间。如果隐式转换失败   该字符串大于4,000个字符。 显式设置对象   使用超过4,000个字符的字符串时。使用NVarChar   当数据库列为nvarchar(max)时。