SqlCommand - 从varchar转换为int

时间:2013-09-04 18:31:28

标签: c# sql sql-server

你好我有这个代码:

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,然后发生异常。

3 个答案:

答案 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