连接数据库,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”栏为默认
表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();   //每次操作完毕,必须要关闭连接
.NET 6 中读取 MDB 数据文件,仍然可以使用 `System.Data.OleDb` 命名空间中的类。然而,需要注意的是,`OleDb` 只能在 Windows 系统上运行,因为它依赖于 Windows 特定的 OLE DB 提供程序。 下面是一个完整的示例,展示如何在 .NET 6 中读取 MDB 文件的数据。 ### 示例代码: ```csharp using System; using System.Data.OleDb; class Program { static void Main() { // 定义连接字符串 string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\path\\to\\your\\database.accdb;"; // 创建连接对象 using (OleDbConnection connection = new OleDbConnection(connectionString)) { try { // 打开数据库连接 connection.Open(); Console.WriteLine("数据库连接成功!"); // 定义SQL查询语句 string query = "SELECT * FROM TableName"; // 创建命令对象 using (OleDbCommand command = new OleDbCommand(query, connection)) { // 执行查询并读取结果 using (OleDbDataReader reader = command.ExecuteReader()) { while (reader.Read()) { // 输出查询结果(假设表中有“Id”和“Name”字段) Console.WriteLine($"Id: {reader["Id"]}, Name: {reader["Name"]}"); } } } } catch (Exception ex) { // 捕获异常并输出错误信息 Console.WriteLine("发生错误:" + ex.Message); } } } } ``` ### 解释: 1. **连接字符串**:`connectionString` 定义了数据库的位置和使用的提供程序。这里使用的是 `Microsoft.ACE.OLEDB.12.0`,适用于 Access 2007 及更高版本的 `.accdb` 文件。如果你使用的是 `.mdb` 文件,请将提供程序改为 `Microsoft.Jet.OLEDB.4.0`。 2. **OleDbConnection**:用于创建与 Access 数据库连接。 3. **打开连接**:通过调用 `connection.Open()` 方法来建立与数据库连接。 4. **OleDbCommand**:用于执行 SQL 查询或命令。 5. **OleDbDataReader**:用于读取查询返回的结果集。 6. **异常处理**:通过 `try-catch` 块捕获可能发生的异常,并输出错误信息。 ### 注意事项: - 确保你的应用程序运行在 Windows 系统上,因为 `OleDb` 依赖于 Windows 的 OLE DB 提供程序。 - 如果你需要跨平台支持,可以考虑使用 SQLite 或其他跨平台数据库。 - 需要在项目中添加对 `System.Data.OleDb` 的引用。可以通过以下命令安装 NuGet 包: ```bash dotnet add package System.Data.OleDb ``` ### 问题产生的原因: - 如果你在非 Windows 平台上运行此代码,可能会遇到 `System.Data.OleDb is not supported on this platform` 的错误,因为 `OleDb` 仅支持 Windows 系统。 - 如果没有正确安装 Microsoft Access Database Engine,可能会导致驱动程序不可用的错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值