Ado.net – Size属性的大小为0
我试图通过ADO.net从数据库获得输出值。 有一个客户端代码:
using (var connection = new SqlConnection(ConnectionString)) { connection.Open(); SqlCommand command = new SqlCommand("pDoSomethingParamsRes", connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.Add("@i", 1); var outParam = new SqlParameter("@out", SqlDbType.VarChar); outParam.Direction = ParameterDirection.Output; command.Parameters.Add(outParam); command.ExecuteNonQuery(); Console.WriteLine(command.Parameters["@out"].Value.ToString()); }
当我运行这个我得到以下exception:
the Size property has an invalid size of 0
根据手动SqlParameter.Size属性我可能会忽略大小。 为什么我得到这个exception? 如何使它的工作不通过大小?
感谢您的帮助!
VarChar和NVarChar是可变宽度字符字段(因此var + char)。 您必须设置长度,否则默认值为零。
参数大小是可变大小输出参数所必需的。 一般来说,ADO.NET根据赋给参数的值来决定参数的大小(因此它是可选的),但是在输出参数中,因为没有设置值,所以需要提供参数所需的大小
将参数大小设置为来自DB的输出variables的大小…说50
outParam.Size = 50;
顺便提一下,即使不是stringtypes参数,也需要设置输出参数的size属性。 例如,如果您使用的是System.Data.SqlDbType.Int,则应将其大小设置为4。
检查MSDN: SqlParameter.Size属性
对于双向和输出参数以及返回值,您必须设置Size的值。 这对于input参数不是必需的,如果没有明确设置,则在执行参数化语句时,根据指定参数的实际大小推断该值。
我不知道这是否是我曾经有过的相同的问题,但使用一个字节的参数有时会导致这个错误。
尝试这个。 显式声明i参数为一个variables。 那么用Value属性赋值。
另外,通过使用这个小命令检查存储区,你可以得到参数的实际大小:
SqlCommandBuilder.DeriveParameters(yourCommand)
然后只是通过参数集合foreach你的方式。
每个人的回答都像我一样清晰。 也许这会帮助一个人,现在我发现什么工作。
需要添加大小的参数
DynamicParameters Params = new DynamicParameters(); Params.Add("@ProfileID", ProfileID); Params.Add("@CategoryName", CategoryName); Params.Add("@Added", dbType: DbType.String, direction: ParameterDirection.Output,size:10); db.Execute(sql, Params, commandType: CommandType.StoredProcedure, commandTimeout: 60); var Added = Params.Get<string>("@Added");