0

我可以像这样访问数据库和 oledb 连接:

OleDbConnection Connection;
Connection = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=" +
               Server.MapPath("~/db.mdb"));
OleDbCommand Command;
Command = new OleDbCommand("SELECT FTPTARIHARALIGI FROM Table1 WHERE ID = 1", Connection);
Connection.Open();
OleDbDataReader reader = Command.ExecuteReader();

Select 命令只返回一个 int 值,我需要将此值访问到变量。

我试过了:

int test = reader.GetInt32(0);

返回:该行/列不存在数据。

但是数据存在并且选择命令有效。

我怎样才能做到这一点?

4

3 回答 3

1

如果你只想要一个值,你可以使用ExecuteScalar方法

 command= new OleDbCommand("SELECT FTPTARIHARALIGI FROM Table1 WHERE ID = 1", Connection);
 command.Connection.Open();
 var value=command.ExecuteScalar();
 connection.Close();

现在 value 变量具有您想要的值

于 2014-11-28T08:24:25.490 回答
1

你需要一个读者。在你开始之前阅读。

[编辑] 正如评论中指出的那样,如果您只追求一个值,那么使用 ExecuteScalar 会更好。而且您可能还希望在您的 reader.GetInt32(0) 周围进行尝试捕获以捕获任何可能的错误...

例如迭代你的结果..

 if (reader.HasRows)
        {
            while (reader.Read())
            {
                int test = reader.GetInt32(0);
// Do something else
            }
        }
于 2014-11-28T08:17:20.403 回答
1

OleDbDataReader在第一行之前开始。如果你不调用OleDbDataReader.Read方法,你永远不会到达第一行。

OleDbDataReader.Read方法

OleDbDataReader 的默认位置在第一条记录之前。因此,您必须调用 Read 才能开始访问任何数据

并使用using语句来处理你的OleDbConnection,OleDbCommandOleDbDataReader.

using(OleDbConnection Connection = new OleDbConnection(conString))
using(OleDbCommand Command = Connection.CreateCommand())
{
    Command.CommandText = "SELECT FTPTARIHARALIGI FROM Table1 WHERE ID = 1";
    using(OleDbDataReader reader = Command.ExecuteReader())
    {
        if(reader.Read())
        {
            int test = reader.GetInt32(0);
        }  
    }
}

如果您只想获取数据的一个单元格,这ExecuteScalar是一个更好的选择。它将第一行的第一列作为object.

using(OleDbConnection Connection = new OleDbConnection(conString))
using(OleDbCommand Command = Connection.CreateCommand())
{
    Command.CommandText = "SELECT FTPTARIHARALIGI FROM Table1 WHERE ID = 1";
    Connection.Open();
    int test = (int)Command.ExecuteScalar();
}
于 2014-11-28T08:21:20.477 回答