今天不用该死的SQLDMO了,改用OleDbConnection。
首先,代码开头添加一些引用:
using System;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
以表示将应用到这些库的一些类和对象。
然后,应该创建一个OleDbConnection对象,并定义其连接字符串。
string strConn;
strConn=@"Provider=""SQLOLEDB.1"";User ID=""sa"";Password=""sa1234"";Data Source=""203-12/QPCEGG"";Initial Catalog=pubs";
OleDbConnection cn=new OleDbConnection(strConn);
其中,strConn中两个双引号是为了标志这个双引号是包含在字符串中的,防止C#将引号认为是字符串的开始和结束的标记。
对于连接数据库,用OleDbConnection的Open()方法开放连接,而用Close()方法关闭连接。
可以通过cn对象获取数据库的一些信息。
cn.Open();
Console.WriteLine("ServerVersion: " + cn.ServerVersion
+ "/nState: " + cn.State.ToString());
cn.Close();
此时编译运行则输出如下:
ServerVersion: 08.00.0194
State: Open
Press any key to continue
下面使用Commands对象对数据库进行查询,并用DataReader对象检查返回的查询结果。
通过cn.CreateCommand(),可以得到OleDbConnection对象cn的Commands对象cmd;
然后用cmd的ExecuteNonQuery()方法执行没有返回行的查询(操作查询),或者通过cmd的ExecuteReader对象来执行有返回行的查询,并建立一个DataReader对象来读取查询结果。
示例代码如下:
//创建Commands对象
int nColumns;
int i;
using(OleDbCommand cmd=cn.CreateCommand())
{
try
{
//执行操作查询(无返回行的查询)
cmd.CommandText="use pubs/nselect * from jobs";
cmd.ExecuteNonQuery();
//执行有返回行的查询
//用DataReader对象检查查询结果
cmd.CommandText="use pubs/nselect * from roysched";
OleDbDataReader rdr=cmd.ExecuteReader();
nColumns=rdr.FieldCount;
while(rdr.Read())
{
for(i=0;i<nColumns;i++)
{
if(i>0)
Console.Write("/t");
Console.Write(rdr[i]);
}
Console.WriteLine();
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
以下是Main函数里面的所有代码:
string strConn;
//设置数据库连接字符串
strConn=@"Provider=""SQLOLEDB.1"";User ID=""sa"";Password=""sa1234"";Data Source=""203-12/QPCEGG"";Initial Catalog=";
//建立数据库连接
OleDbConnection cn=new OleDbConnection(strConn);
cn.Open();
//显示当前数据库
Console.WriteLine(cn.Database);
//显示数据库版本信息和状态信息
Console.WriteLine("ServerVersion: " + cn.ServerVersion
+ "/nState: " + cn.State.ToString());
//创建Commands对象
int nColumns;
int i;
using(OleDbCommand cmd=cn.CreateCommand())
{
try
{
//执行操作查询(无返回行的查询)
cmd.CommandText="use pubs/nselect * from jobs";
cmd.ExecuteNonQuery();
//执行有返回行的查询
//用DataReader对象检查查询结果
cmd.CommandText="use pubs/nselect * from roysched";
OleDbDataReader rdr=cmd.ExecuteReader();
nColumns=rdr.FieldCount;
while(rdr.Read())
{
for(i=0;i<nColumns;i++)
{
if(i>0)
Console.Write("/t");
Console.Write(rdr[i]);
}
Console.WriteLine();
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
//关闭数据库连接
cn.Close();
执行结果为:
master
ServerVersion: 08.00.0194
State: Open
BU1032 0 5000 10
BU1032 5001 50000 12
PC1035 0 2000 10
PC1035 2001 3000 12
PC1035 3001 4000 14
PC1035 4001 10000 16
PC1035 10001 50000 18
BU2075 0 1000 10
BU2075 1001 3000 12
BU2075 3001 5000 14
BU2075 5001 7000 16
BU2075 7001 10000 18
BU2075 10001 12000 20
BU2075 12001 14000 22
BU2075 14001 50000 24
PS2091 0 1000 10
PS2091 1001 5000 12
PS2091 5001 10000 14
PS2091 10001 50000 16
PS2106 0 2000 10
PS2106 2001 5000 12
PS2106 5001 10000 14
PS2106 10001 50000 16
MC3021 0 1000 10
MC3021 1001 2000 12
MC3021 2001 4000 14
MC3021 4001 6000 16
MC3021 6001 8000 18
MC3021 8001 10000 20
MC3021 10001 12000 22
MC3021 12001 50000 24
TC3218 0 2000 10
TC3218 2001 4000 12
TC3218 4001 6000 14
TC3218 6001 8000 16
TC3218 8001 10000 18
TC3218 10001 12000 20
TC3218 12001 14000 22
TC3218 14001 50000 24
PC8888 0 5000 10
PC8888 5001 10000 12
PC8888 10001 15000 14
PC8888 15001 50000 16
PS7777 0 5000 10
PS7777 5001 50000 12
PS3333 0 5000 10
PS3333 5001 10000 12
PS3333 10001 15000 14
PS3333 15001 50000 16
BU1111 0 4000 10
BU1111 4001 8000 12
BU1111 8001 10000 14
BU1111 12001 16000 16
BU1111 16001 20000 18
BU1111 20001 24000 20
BU1111 24001 28000 22
BU1111 28001 50000 24
MC2222 0 2000 10
MC2222 2001 4000 12
MC2222 4001 8000 14
MC2222 8001 12000 16
MC2222 12001 20000 18
MC2222 20001 50000 20
TC7777 0 5000 10
TC7777 5001 15000 12
TC7777 15001 50000 14
TC4203 0 2000 10
TC4203 2001 8000 12
TC4203 8001 16000 14
TC4203 16001 24000 16
TC4203 24001 32000 18
TC4203 32001 40000 20
TC4203 40001 50000 22
BU7832 0 5000 10
BU7832 5001 10000 12
BU7832 10001 15000 14
BU7832 15001 20000 16
BU7832 20001 25000 18
BU7832 25001 30000 20
BU7832 30001 35000 22
BU7832 35001 50000 24
PS1372 0 10000 10
PS1372 10001 20000 12
PS1372 20001 30000 14
PS1372 30001 40000 16
PS1372 40001 50000 18