你好我有这个代码:
SqlCommand sc2 = new SqlCommand("SELECT ... WHERE akce=" + zakce.Text, spojeni);
spojeni.Open();
object vysledek2 = sc2.ExecuteScalar(); // This is the exception line
我正在接受以下异常:
System.Data.SqlClient.SqlException(0x80131904)
转换失败时 将varchar值'137000-01'转换为数据类型int。
在我在vysledek2上设置断点时的异常行为null,然后发生异常。
答案 0 :(得分:5)
从不。永远。 CONCATENATE。输入
SqlCommand sc2 = new SqlCommand("SELECT SUM(ISNULL(payments,0)) AS sumpaymentsFROM clientpayments WHERE akce=@acke", spojeni);
sc2.Parameters.AddWithValue("acke", zakce.Text);
此外 - 命令,连接等都是IDisposable
- 你应该在它们周围使用using
。
答案 1 :(得分:1)
const string sqlSelect = @"SELECT ... WHERE akce=@akce";
using (spojeni = new SqlConnection(connectionString))
using(var command = new SqlCommand(sqlSelect,spojeni))
{
command.Parameters.AddWithValue("@akce", zakce.Text);
command.Connection.Open();
object vysledek2 = command.ExecuteScalar();
}
答案 2 :(得分:0)
首先,尝试更改
SqlCommand sc2 = new SqlCommand("SELECT SUM(ISNULL(payments,0)) AS sumpaymentsFROM clientpayments WHERE akce=" + zakce.Text, spojeni);
类似
SqlCommand sc2 = new SqlCommand("SELECT SUM(ISNULL(payments,0)) AS sumpaymentsFROM clientpayments WHERE akce='" + zakce.Text + "'", spojeni);
其次,看看SQL Injection是什么以及如何使用parametereized queries。