6

しばらくプログラミングから離れていましたが、最近プログラミングが必要になりました。

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 was Unhandled.No data exists for the row/column.」というエラーが表示され続けます。エラーは fname_txt.Text = reader.GetString(0); を指しています。

しかし、すべてのコードを含む「送信」ボタンが機能していて、データベーステーブル自体でチェックしたため、実際にはそこにデータがあります。

任意のヒント?ありがとうございました。

4

3 に答える 3

8

DataReaders は、最初の行の前から開始します。

最初の行から読み取るには、1 回呼び出しますRead()
最初の行がない場合は、Read()を返しfalseます。

于 2013-08-09T21:34:18.163 に答える
5

最初にリーダー (行) の位置を移動する必要があります。不要になったら閉じます。

...
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);
    }
}
...
于 2013-08-09T21:49:19.970 に答える
0

「行/列にデータが存在しません」と表示されている場合は、新しいデータリーダーを使用してください

OleDbCommand cmdsearch2 = new OleDbCommand("select * from tbl_quotation where quoteno = @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();
于 2015-07-22T09:08:34.900 に答える