【问题标题】:SqlCommand - conversion from varchar to intSqlCommand - 从 varchar 到 int 的转换
【发布时间】:2013-09-04 18:31:27
【问题描述】:

你好,我有这个代码:

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

【问题讨论】:

  • 考虑把你的变量名改成英文——这很难读:)
  • 另外你在sumpaymentsFROM之间有错别字。
  • 顺便说一句 - 请参阅“Bobby Tables” - 通过 Google、Bing 等
  • 是的,如果您想成为另一个 SQL 注入统计数据,这是一种非常好的编码方式。

标签: c# sql sql-server


【解决方案1】:

从来没有。曾经。连接。输入。

SqlCommand sc2 = new SqlCommand("SELECT SUM(ISNULL(payments,0)) AS sumpaymentsFROM clientpayments WHERE akce=@acke", spojeni);
sc2.Parameters.AddWithValue("acke", zakce.Text);

另外——命令、连接等都是IDisposable——你应该在它们周围使用using

【讨论】:

  • Hell Marc,感谢您的回复,我尝试了您的建议,但仍然遇到同样的异常,您不知道我在哪里犯了错误吗?
  • @Marek:- 作为一个建议,为什么你想用糟糕的编码实践来纠正你的错误??
  • @Marek 不能抛出相同的异常 - 这里没有字符串/转换。检查您是否已构建等,并检查确切的消息
  • @RahulTripathi 我猜OP 可能不知道他的代码出了什么问题,这当然解决了他的问题,但是他没有机会知道他的代码为什么不起作用(当然,除非他看一看其他答案)。
【解决方案2】:
        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();
        }

【讨论】:

    【解决方案3】:

    首先,尝试改变

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-16
      • 2016-06-27
      • 2013-07-12
      • 2013-02-28
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 2013-11-27
      相关资源
      最近更新 更多