SQL 数据读取器读取不一致

SQL datareader reading inconsistently

我在 C# 中有以下代码-

private void sendnotificationmail(string enqid)
{
    try
    {
        connection.Open();
        List<string> maillist = new List<string>();
        string sql = "SELECT     TrussLog.repmail, TrussLog.branchemail, TrussEnquiry.DesignerEmail FROM         TrussLog FULL OUTER JOIN                      TrussEnquiry ON TrussLog.enquirynum = TrussEnquiry.Enquiry_ID         where TrussEnquiry.Enquiry_ID = '" + enqid + "'";
        SqlCommand cmd = new SqlCommand(sql);
        SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            if (!string.IsNullOrEmpty(reader[0].ToString()))
            {
                maillist.Add(reader[0].ToString());
            }
            if (!string.IsNullOrEmpty(reader[1].ToString()))
            {
                maillist.Add(reader[1].ToString());
            }
            if (!string.IsNullOrEmpty(reader[2].ToString()))
            {
                maillist.Add(reader[2].ToString());
            }
        }
        connection.Close();

        if (result != DialogResult.Cancel)
        {
            processmail(maillist);
        }
    }
    catch (Exception)
    {
    }
}

我正在从我的组合框中获取变量 enqid 的值 Windows form.The 组合框的内容是从数据库中检索的。在加载表单时,组合框显示从数据库中检索到的第一个 enquiryID。当我 运行 我的程序时,数据 reader 跳过循环。但是,如果我 select 在组合框中进行不同的查询,数据 reader 可以正常工作

您似乎忘记了 CommandConnection:

  // SendNotificationMail is more readable then sendnotificationmail
  private void sendnotificationmail(string enqid) {
    // put IDisposable into using...
    using (SqlConnection con = new SqlConnection("ConnectionStringHere")) {
      con.Open();

      using (SqlCommand cmd = new SqlCommand()) {
        cmd.Connection = con; // <- You've omitted this

        // have SQL readable
        cmd.CommandText =
          @"SELECT TrussLog.repmail, 
                   TrussLog.branchemail, 
                   TrussEnquiry.DesignerEmail 
              FROM TrussLog FULL OUTER JOIN                      
                   TrussEnquiry ON TrussLog.enquirynum = TrussEnquiry.Enquiry_ID         
             WHERE TrussEnquiry.Enquiry_ID = @prm_Id";

        // use parametrized queries
        cmd.Parameters.AddWithValue("@prm_Id", enqid);

        using (SqlDataReader reader = cmd.ExecuteReader()) {
          while (reader.Read()) {
            ...
          }
        }
      }
    }
  }

而且从来没有以后再也没有写类似的代码

  catch (Exception)
  {
  }

表示"just ignore all the errors and continue".