0

Access から値を取得して文字列変数またはテキスト ボックスに入れようとしています。MS-Visual Studio 2012 と Access 2007 を使用しています。

string sql = "SELECT [Time Checked-In] FROM HotelCustomers WHERE [Room Number] =" + textBox1.Text + ";";
        string my_Connection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= c:\\Users\\Acer\\Documents\\HotelCustomersOld.mdb";
        OleDbConnection myCon = new OleDbConnection(my_Connection);
        myCon.Open();
        DataTable dataTable = new DataTable();
        OleDbDataAdapter adapter = new OleDbDataAdapter(sql, my_Connection);
        adapter.Fill(dataTable);
        string aString = dataTable.Rows[0]["Time Checked-In"].ToString();
        textBox1.Text = aString;
4

1 に答える 1

0

問題は、HotelCustomers テーブルで使用されている名前が原因である可能性があります。OleDb が使用できるものに変更している可能性があります。

より OleDb に適したものを使用するように SQL を書き直すことができます。

  string sql = "SELECT [Time Checked-In] AS CheckIN FROM HotelCustomers WHERE [Room Number] =" + textBox1.Text + ";";

とはいえ、この単純なクエリにはOleDbDataAdapterまたはのオーバーヘッドは必要ありません。DataTable

private const string CONN_STR = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= c:\\Users\\Acer\\Documents\\HotelCustomersOld.mdb";

private string GetCheckInTime(string roomNumber) {
  string sql = "SELECT [Time Checked-In] AS CheckIN FROM HotelCustomers WHERE [Room Number] =" + roomNumber + ";";
  object obj = null;
  using (var cmd = new OleDbCommand(sql, new OleDbConnection(CONN_STR))) {
    cmd.Connection.Open();
    obj = cmd.ExecuteScalar();
    cmd.Connection.Close();
  }
  if ((obj != null) && (obj != DBNull.Value)) {
    return obj.ToString();
  }
  return null;
}

接続文字列は変わらないので、定数にしました。

于 2013-04-09T21:37:30.140 に答える