c# – 尝试使用ExecuteScalar,并获得“指定的强制转换无效”错误
发布时间:2020-12-15 04:02:29 所属栏目:百科 来源:网络整理
导读:我试图通过使用产品名称来获得产品价格.以下是我正在使用的功能. public int GetProductPrice(string ProductName){ cnn.Open(); SqlCommand cmd = new SqlCommand("SELECT ProductPrice FROM Products WHERE ProductName ='" + ProductName + "'",cnn); int
我试图通过使用产品名称来获得产品价格.以下是我正在使用的功能.
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(); …然后查看调试器.还要看一下数据库中字段的类型 – 这应该真正告诉你期待什么.看看这两者之间的映射的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |