微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 尝试使用ExecuteScalar,并获得“指定的强制转换无效”错误

我试图通过使用产品名称来获得产品价格.以下是我正在使用的功能.
public int GetProductPrice(string ProductName)
{
    cnn.open();
    sqlCommand cmd = new sqlCommand("SELECT ProductPrice FROM Products WHERE ProductName ='" + ProductName + "'",cnn);
    int price = (int)cmd.ExecuteScalar();
    return price;
}

现在我一直得到这个错误指定的强制转换是无效的,我不知道为什么.有人能帮我吗 ?

解决方法

首先,您应该使用参数化sql而不是将参数直接放入sql中.此外,您应该使用using语句在完成后关闭命令 – 和连接.哦,并为每个操作创建一个新的sqlConnection.所以类似于:
public int GetProductPrice(string productName)
{
    // Quite possibly extract the connection creation into a separate method
    // to call here.
    using (var conn = new sqlConnection(...))
    {
        conn.open();
        using (var command = new sqlCommand(
            "SELECT ProductPrice FROM Products WHERE ProductName = @ProductName",conn))
        {
            command.AddParameter("@ProductName",sqlDbType.VarChar)
                   .Value = productName;
            object price = command.ExecuteScalar();
            // And you'd do the casting here
        }
    }
}

接下来,我们不知道ProductPrice字段的类型.可能是你得到了很长的回报,或者可能是小数.最简单的方法是使用:

object tmp = cmd.ExecuteScalar();

…然后查看调试器.还要看一下数据库中字段的类型 – 这应该真正告诉你期待什么.看看这两者之间的映射的SqlDbType枚举.

原文地址:https://www.jb51.cc/csharp/92935.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐