简书链接:SqlCommandParameters转SqlParameter的输出函数取值为空的坑
文章字数:142,阅读全文大约需要1分钟

经过测试发现 直接循环赋值发现, SqlCommand.Parameters没指定size,但是转sqlparammeter没指定size就会导致字符串为空, 之前也尝试过拷贝,发现内存中size就是0 ,所以针对字符串只能强制给定大小。

1
2
3
4
5
6
7

SqlParameter sqlParameter;
if (sqlCommand.Parameters[i].SqlDbType == SqlDbType.VarChar|| sqlCommand.Parameters[i].SqlDbType==SqlDbType.NVarChar)//必须指定size,否则字符串获取为空
{
sqlParameter = new SqlParameter(sqlCommand.Parameters[i].ParameterName, SqlDbType.VarChar,500) { Value = sqlCommand.Parameters[i].Value, Direction = sqlCommand.Parameters[i].Direction };
}

1
2
3
4
5
cmd.Parameters.Add("@x", SqlDbType.VarChar);
cmd.Parameters["@x"].Precision = 19;
cmd.Parameters["@x"].Scale = 5;
cmd.Parameters["@x"].Direction = ParameterDirection.Output;

定义方法的多种构造

1
sqlParameter = new SqlParameter(sqlCommand.Parameters[i].ParameterName, SqlDbType.VarChar,500) { Value = sqlCommand.Parameters[i].Value, Direction = sqlCommand.Parameters[i].Direction };

或者不指定(针对非字符串类型)

1
sqlParameter = new SqlParameter(sqlCommand.Parameters[i].ParameterName, SqlDbType.Decimal) { Value = sqlCommand.Parameters[i].Value, Direction = sqlCommand.Parameters[i].Direction };