0

我正在尝试从访问中获取一个值并将其放入字符串变量或文本框中,我使用的是 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 很可能正在将其更改为可以合法使用的东西。

您可以重新编写 SQL 以使用更适合 OleDb 的东西:

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

也就是说,对于这个简单的查询,您不需要OleDbDataAdapteror的开销。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 回答