【问题标题】:C# SqlDataReader No data exists for the row/columnC# SqlDataReader 行/列不存在数据
【发布时间】:2013-08-09 21:30:55
【问题描述】:

我已经有一段时间没有编程了,但最近我需要它。

我在使用 Sql Server Compact Edition 4.0(VS2012 内置)的 SQL DataReader 时遇到问题。

string connstring = "Data Source=C:\\..(Path Here)..\\VacationsDB.sdf";
SqlCeConnection conn = new SqlCeConnection(connstring);
string strSQL = "SELECT * FROM Vacation WHERE VacationNo = @val";

using (SqlCeCommand cmd = new SqlCeCommand(strSQL, conn))
{
    //read search value from from text field
    cmd.Parameters.AddWithValue("@val", vacationno_txt.Text);
    conn.Open();

    SqlCeDataReader reader = cmd.ExecuteReader();
    fname_txt.Text = reader.GetString(0);
    mname_txt.Text = reader.GetString(1);
    /*
     * .. snip
     */
    vacationno_txt.Text = reader.GetString(11);
    conn.Close();
}

我不断收到错误消息: “InvalidOperationException 未处理。行/列不存在数据。”错误点在 fname_txt.Text = reader.GetString(0);

但实际上那里有数据,因为带有所有代码的“提交”按钮正在工作,我已经在数据库表本身中检查了它。

有什么建议吗?谢谢。

【问题讨论】:

    标签: c# asp.net sqldatareader


    【解决方案1】:

    DataReader 在第一行之前开始。

    要从第一行读取,请调用一次Read()
    如果没有第一行,Read() 将返回false

    【讨论】:

      【解决方案2】:

      您需要先移动阅读器的(行)位置。 不再需要时关闭它。

      ...
      using(SqlCeDataReader reader = cmd.ExecuteReader())
      {
          if (reader.Read())
          {
              fname_txt.Text = reader.GetString(0);
              mname_txt.Text = reader.GetString(1); . . . 
              vacationno_txt.Text = reader.GetString(11);
          }
      }
      ...
      

      【讨论】:

      • 谢谢。有效。我已经移动了 'conn.Open();'在“使用”块上方并使用您的建议并且它有效。非常感谢。
      【解决方案3】:

      如果显示“行/列不存在数据”,请使用新的数据读取器

      OleDbCommand cmdsearch2 = new OleDbCommand("Select * from tbl_quotation wherequotationno = @qno ", con); cmdsearch2.Parameters.AddWithValue("@qno", txt_quotationno.Text); OleDbDataReader drr = cmdsearch2.ExecuteReader();

                  if (drr.HasRows)
                  {
                      while (drr.Read())
                      {
                          cmb_customername.Text = drr["customername"].ToString();
                          txt_revno.Text = drr["revno"].ToString();
                          dtp_qdate.Text = drr["qdate"].ToString();
                          txt_paymentterms.Text = drr["paymentterms"].ToString();
                          txt_delivery.Text = drr["delivery"].ToString();
                          txt_freight.Text = drr["freight"].ToString();
                          txt_quotationvalidity.Text = drr["validity"].ToString();
      
      
                      }
                  }
                  drr.Close();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 2011-09-22
        • 1970-01-01
        • 2013-04-07
        • 2011-07-27
        相关资源
        最近更新 更多