连接数据库,OleDbDataReader读取mdb的数据

去年下半年用VB6弄了简单的串口通信,现在看过去仿佛动物进化史..
年初开始每月交报表,手算个破表耗掉两三个钟,交上去要审核再算一遍。去尼玛的时间!
为效率,人士推荐用了WPF。鼓捣了俩月,现在用上数据库。


接下来为c#简单读取mdb数据的操作。

1、连接数据库

引用:

using System.Data;
using System.Data.OleDb;    

建立连接:
注意OleDbConnection();括号里的转义字符串,若直接放在括号里,字符串前要加个“@”。
mdb文件路径,这里还是bin文件夹下

string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=../MDB文件名.mdb"
OleDbConnection myconnection = new OleDbConnection(ConnectionString );     //建立数据库连接

若要用户名和密码:

User ID=MyUserName;  Password=MyPassword;

用OleDbCommand类来执行SQL语句:

OleDbCommand cmd = myconnection.CreateCommand();    
cmd.CommandText = "select * from 表名";   //mdb文件里的表名
myconnection.Open();    //打开数据库连接

2、用OleDbDataReader读取mdb文件里的某个数据/某列数据

先看表:mdb,行号/列号都从0开始。第0列“ID”栏为默认
连接数据库,OleDbDataReader读取mdb的数据_第1张图片


OleDbDataReader odrReader = cmd.ExecuteReader();

①ExecuteReader方法存在的目的: 尽可能快的对数据库进行查询并得到结果
②ExecuteReader:返回一个DataReader对象,如果在SqlCommand对象中调用,则返回SqlDataReader;如果在OledbCommand对象中调用,返回的是OledbDataReader,可以调用DataReader的方法和属性迭代处理结果集。


读取某列数据:(转载)

string a = "";
while (odrReader.Read())    //用Read读取数据
 {
    a += odrReader.GetName(0).ToString();  //.GetName(int index):获取指定列的名称
    a += odrReader.GetInt32(0).ToString(); //.GetInt32(int index):获取指定列的32位有符号整型值              
    a += "\t";          //换到下一个TAB位置
    a += odrReader.GetString(1);           //.GetString(int index):获取指定列的字符串
    a += "\t";
    a += odrReader.GetString(2);
    a += "\t";
    a += "\n";         //换行
 }
 odrReader.Close();      //关闭DataReader

 textBlock1.Text = a;    //读取的数据载入textBlock1

这里读取了前3列数据。


OleDbDataReader.Read();

初始指针指向第一条数据之前,每调用一次reader,指针就下移一条,只要没有移到最后一条之后,就返回true。
msdn说明:
使 OleDbDataReader 前进到下一条记录,如果存在多个行,则为 true;否则为 false。
OleDbDataReader 的默认位置在第一条记录前面。因此,必须调用 Read 来开始访问任何数据。
在使用 OleDbDataReader 时,关联的 OleDbConnection 正忙于为其服务,直到调用 Close 为止。


读取表中某行某列的数据:转载一个object

从OleDbDataReader中获取指定行、指定列的值

static object GetValue(OleDbDataReader reader, int row, int col)    
//传入前面新建的DataReader
//行号row,列号col
  {
    int i = 0;
    object value = null;
    while (reader.Read())
      {
        if (i == row)
           {
            value = reader[col];
            break;
           }
       i++;
      }
            reader.Close();    //每次读取后一定要关闭Reader
            return value;
   }

while (reader.Read()){}

每执行一次,相当于对该数据表进行一次扫描。

扫描到某个数据,接着break:
尚未扫描到最后一条数据,reader.Read()还为true,多次调用GetValue会导致扫描不到前面的数据(表述正确否?),所以要关闭reader.Close()。

注意:继续调用GetValue,即关闭reader之后,要重载ExecuteReader。


为图方便,在事件中直接多次调用GetValue,把ExecuteReader扔进去:

static object GetValue( OleDbCommand command, int row,  string col)      
 {                                                                       
  OleDbDataReader Reader = command.ExecuteReader(); //Reader在这里  
  object value = null;            
  int i = 0; 
  while (Reader.Read())
   {              
     if (i == row)   
     {
     value = Reader[col];                   
     break;
     }
    i++;
   }
    Reader.Close();           
    return value;
 }

定义reg用于操作,注意类型转换:

string s = (string)GetValue(odrReader, 1, 2);   //原
string ss = (string)GetValue(cmd, 1, 2);        //第二种

最后要关闭数据库连接:

myconnection.Close();   //每次操作完毕,必须要关闭连接

你可能感兴趣的:(C#,.NET)