如何从数据库创建变量和访问值?

时间:2014-11-28 08:13:12

标签: c# oledb oledbdatareader

我有这样的访问数据库和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);
  

返回:行/列没有数据。

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

我该怎么做?

3 个答案:

答案 0 :(得分:1)

你的getint之前需要reader.read

[编辑]并且正如评论中指出的那样,如果您只在一个值之后,那么您最好使用ExecuteScalar。而且你也可能想要在你的读者身上试一试.GetInt32(0)可以捕获任何可能的错误...

E.g。迭代你的结果..

 if (reader.HasRows)
        {
            while (reader.Read())
            {
                int test = reader.GetInt32(0);
// Do something else
            }
        }

答案 1 :(得分:1)

OleDbDataReader在第一行之前开始。如果您不拨打OleDbDataReader.Read方法,则永远不会到达第一行。

来自OleDbDataReader.Read Method;

  

OleDbDataReader的默认位置是之前的第一个   记录。 因此,您必须调用“读取”以开始访问任何数据

使用using statement处理您的OleDbConnectionOleDbCommandOleDbDataReader

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();
}

答案 2 :(得分:1)

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

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

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