Ado.net - Size属性的大小为0如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我试图通过ADO.net从DB获得输出值。有一个客户端代码:

    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());
    }

当我运行这个时,我得到以下异常:

the Size property has an invalid size of 0

根据手动SqlParameter.Size属性,我可能会忽略大小。为什么我会得到这个异常?如何在不通过尺寸的情况下使其工作?

提问于
用户回答回答于

VarChar和NVarChar是可变宽度字符字段(因此var + char)。您必须设置长度,否则默认值为零。

用户回答回答于

参数大小对于可变大小的输出参数是必需的。一般来说,ADO.NET根据赋给参数的值决定参数的大小(因此它是可选的),但是在输出参数中,因为没有值是Set,所以需要提供参数所需的大小

将参数大小设置为DB中输出变量的大小...说50

outParam.Size = 50;

扫码关注云+社区