去年下半年用VB6弄了简单的串口通信,现在看过去仿佛动物进化史..
年初开始每月交报表,手算个破表耗掉两三个钟,交上去要审核再算一遍。去尼玛的时间!
为效率,人士推荐用了WPF。鼓捣了俩月,现在用上数据库。
接下来为c#简单读取mdb数据的操作。
引用:
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(); //打开数据库连接
先看表:mdb,行号/列号都从0开始。第0列“ID”栏为默认
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 为止。
从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(); //每次操作完毕,必须要关闭连接