6

是否可以连接到本地 MDB 文件并从中挑选一点信息?我在 .mbd 文件中有一个表,其中包含一点信息。我希望将该记录输出到禁用的文本框中以供参考。我相信我可以打开数据库并运行查询,但不知道我需要从中读取什么。

谢谢

var myDataTable = new DataTable();
        using (var conection = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + "data source=C:\\menus\\newmenus\\menu.mdb;Password=****"))
        {
            conection.Open();
            var query = "Select siteid From n_user";
            var adapter = new OleDbDataAdapter(query, conection);
            OleDbCommandBuilder oleDbCommandBuilder = new OleDbCommandBuilder(adapter);
        }
4

4 回答 4

10

要简单地读取数据库表上的单个字段,您可以使用OleDbDataReader循环遍历结果并返回所需字段。

var myDataTable = new DataTable();
using (var conection = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + "data source=C:\\menus\\newmenus\\menu.mdb;Password=****"))
{
     conection.Open();
     var query = "Select siteid From n_user";
     var command = new OleDbCommand(query, conection);
     var reader = command.ExecuteReader();
     while(reader.Read())
         textBox1.Text = reader[0].ToString();

 }

如果您只有一条记录和一个字段,那么更好的解决方案是方法ExecuteScalar

     conection.Open();
     // A query that returns just one record composed of just one field
     var query = "Select siteid From n_user where userid=1";
     var command = new OleDbCommand(query, conection);
     int result = (int)command.ExecuteScalar();  // Supposing that siteid is an integer

可能我还应该提到,如果查询没有找到与用户 ID 匹配的ExecuteScalar 返回null ,所以最好小心这里的转换

     object result = command.ExecuteScalar();
     if( result != null)
        int userID  = (int)result;
        .....
于 2013-06-03T22:05:57.767 回答
2

是的,很有可能。只需让适配器填充DataTable,我认为您也不需要OleDbCommandBuilder.

    using (var conection = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + "data source=C:\\menus\\newmenus\\menu.mdb;Password=****"))
    {
        conection.Open();
        var query = "Select siteid From n_user";
        var adapter = new OleDbDataAdapter(query, conection);
        adapter.Fill(myDataTable);
        myTextBox.Text = myDataTable.Rows[0][0].ToString();
    }

另外我认为 usingExecuteScalar会是一个更好的解决方案,但我的答案是针对您已经实例化的对象量身定制的。

于 2013-06-03T22:06:18.840 回答
2

您可以使用OleDbCommand.ExecuteScalar来检索单个值。它作为对象返回,您可以将其转换为正确的类型。

于 2013-06-03T22:06:28.817 回答
1

你在找这样的stm吗?

    OleDbCommand cmd = 新 OleDbCommand();
    OleDbDataReader dr = cmd.ExecuteReader();
    而 (dr.Read())
    {
    // 在这里阅读你的东西。
    }

于 2013-06-03T22:05:06.983 回答