2016-10-11 69 views
0

我一直在试图使这个代码块的工作,但我似乎无法找到它的错误。它不会返回我正在查找的值。我会尝试在工作台中运行SQL语句,并返回所需的行数(即3)。mysql SQL语句不起作用C#

 try 
     { 
      using (MySqlConnection con = new MySqlConnection(GlobalValues.ConnectionString)) 
      { 
       using (MySqlCommand cmd = new MySqlCommand()) 
       { 
        cmd.CommandText = 
         @" 
          SELECT strDetPremID, strPremiseName 
            FROM tbldetailprem 
            INNER JOIN tblpremise ON strDetPremID = strPremiseID 
            WHERE strDetPremContID = @id; 
          ; 
          " 
         ; 

        cmd.Parameters.AddWithValue("@id", id); 
        cmd.Connection = con; 
        using (MySqlDataAdapter da = new MySqlDataAdapter(cmd)) 
        { 
         con.Open(); 
         cmd.ExecuteNonQuery(); 
         this.Clear(); 
         da.Fill(this); 
         con.Close(); 
        } 
       } 
      } 
     } 
     catch (MySqlException ex) 
     { 
      MessageBox.Show(ex.ToString() + " - " + ex.Number); 
     } 

能否请你告诉我,什么是错,此代码

+3

你运行一个select语句,并要求2倍的值(strDetPremID和strPremiseName)和你期待一个INT回来?这个陈述怎么只返回'3'?您也不会通过选择影响任何行。 – Darren

+1

这是什么类型的应用程序?通常我所做的是执行一个datareader,然后根据datareader的属性分配变量。你的SQL是一个'SELECT'语句,那你为什么要执行'ExecuteNonQuery'? – Hill

+0

@kalamazoowho - 它似乎是'MySqlDataAdapter'的一个实例。 – Hill

回答

0

这可能提供更多的评论,但我缺乏代表发表评论。

对于我来说,在代码中可能会出现问题并不完全清楚,因此我的假设是存在一个不会被作为MySQLException捕获的错误。

您是否试过删除try/catch语句以捕获任何会阻止affectedRows被更新的错误?

此外,我不知道是否它导致SyntaxError或不,但似乎你有一个额外的分号在cmd.CommandText ...我想。

1

当你要计算的行数,使用以下查询:

SELECT COUNT(*) FROM tbldetailprem 
INNER JOIN tblpremise ON strDetPremID = strPremiseID 
WHERE strDetPremContID = @id; 

然后使用命令对象的ExecuteScalar()方法获取的COUNT(*)值。 ExecuteNonQuery()用于添加,更新和删除记录,而不是用于选择它们。

更多信息可以在这里找到: https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-sql-command.html