数据库访问是程序中应用最普遍的部分
随着C#和ADO
NET的引入
这种操作变得更简单
这篇文章将示范四种最基础的数据库操作
● 读取数据其中包括多种数据类型整型字符串日期型
● 写数据如读数据一样我们也需要写入多种类型的数据这可以通过SQL语句来完成
● 更新或修改数据我们将再次用到SQL语句
● 删除数据用SQL实现
上述的操作都要基于Microsoft Access 数据库但是我们要对连接字符串进行简单的修改才能使用SQL或其他ADO数据
开始操作
在使用ADO类之前我们将把ADONET的命名空间和一些常用数据类包括进来把下面的代码加入到你想进行数据库操作的地方它的具体位置应该是命名空间行之后类声明之前
using SystemData; // State variables
using SystemDataADO; // Database
using SystemGlobalization; // Date
你或许还要向SystemData命名空间添加参数这取决于工程的类型需要你所添加的代码的编译信息会提醒你这一点添加SystemData命名空间的操作
● 右键点击Solution explorer参数选项
● 选择添加参数
● 选择NET框架栏
● 双击Systemdatadll条目
● 选择OK
● Systemdata应该出现在Solution explorer的参数列表中了
由于在多数操作中都会使用连接字符串所以我建议你将它包含在使用的类中
注意程序中数据库文件的路径可能和下面不一样
//Attributes
public const string DB_CONN_STRING =
Driver={Microsoft Access Driver (*mdb)}; +
DBQ=D:\\CS\\TestDbReadWrite\\SimpleTestmdb;
读取数据
现在的操作就比较有趣了读是通过ADODataReader类完成的(参看Chris Maunder的文章The ADONET ADODataReader CLASS 以了解更多)读的操作步骤如下
● 用ADO连接打开数据库
ADOConnection conn = new ADOConnection(DB_CONN_STRING);
connOpen();
● 创建一个SQL语句来确认要获取的数据这条命令执行后返回一个ADODataReader对象注意Execute方法中的OUT关键字这是C#中传递参数的方式
ADODataReader dr;
ADOCommand cmd = new ADOCommand( SELECT * FROM Person conn );
cmdExecute( out dr);
● 循环遍历ADODataReader中的每条记录直到完成注意数据被作为字符串直接返回字段名显示了要读取的字段
while( drRead() )
{
SystemConsoleWriteLine( dr[FirstName] );
}
● 清除
但是作为优秀的程序员我们应该将代码放在try/catch/finally 中确保我们能够控制所有意外
try
{
the database operations
}
catch( Exception ex )
{
SystemConsoleWriteLine( READING: );
SystemConsoleWriteLine( ERROR: + exMessage );
SystemConsoleWriteLine( SQL : + sSqlCmd );
SystemConsoleWriteLine( Conn: + DB_CONN_STRING );
}
finally
{
// Close the connection
if( connState == DBObjectStateOpen )
connClose();
}
读取不同的数据类型
[stuff]通常可以返回某个类型的字符串但是要获取一个整型或 DateTime对象就需要列出这些数据以一个简单的例子或是ADODataReade内建的很多例子中的一个就可以说明例如
int nOrdinalAge = dr
GetOrdinal(
Age
);
int nAge = drGetInt( nOrdinalAge );
DateTime tUpdated = (DateTime)dr[Updated];
注意通过名字定位GetOrdinal字段的用法如果字段是空的(没有填入值)上面的代码会引发一个异常这种情况下我们用IsNull方法检验数据是否存在
int nOrdinalAge = dr
GetOrdinal(
Age
);
if( drIsNull( nOrdinalAge ) )
{
SystemConsoleWriteLine( Age : Not given! );
}
else
{
int nAge = drGetInt( nOrdinalAge );
SystemConsoleWriteLine( Age : + nAge );
插入修改删除和其他SQL命令
插入修改和删除用SQL语句很容易实现下面的代码通过一个SQL命令插入一条记录
// SQL command
String sSQLCommand = INSERT INTO Person (Age FirstName
Description Updated) +
VALUES( Bob Is a Penguin
// :: );;
// Create the command object
ADOCommand cmdAdder = new ADOCommand(
sSQLCommand
DB_CONN_STRING);
cmdAdderActiveConnectionOpen();
// Execute the SQL command
int nNoAdded = cmdAdderExecuteNonQuery();
SystemConsoleWriteLine( \nRow(s) Added = + nNoAdded + \n );
注意try/catch并未出现在上述例子中实际上是需要写的
插入
上述代码通过一条SQL语句插入一条记录这条命令稍后执行命令格式中需要注意的是
● 数值直接赋值不同单引号();
● 字符串必须用单引号括起来 (blah)
● 字符串中不能包含任何单引号或是双引号
● 日期和时间都要以国际格式包括在单引号中(YYYYY/MM/DD HH:MM:SS)
修改
UPDATE命令指示了要被修和已做修改的记录ExecuteNonQuery()返回的值显示变化的纪录的数目这样如果在表格中有个Peter那它就会返回
String sSQLCommand = UPDATE Person SET Age = WHERE FirstName = Peter;
删除
DELETE命令显示要被删除的纪录这可能会是几条ExecuteNonQuery()返回的值显示变化的纪录的数目这样如果表中有个Bobo就返回这两个Bobo都会被删除
String sSQLCommand = DELETE FROM Person WHERE FirstName = Bobo;
关于样例程序
样例是个简单的控制程序它执行Microsoft Access数据库中提供的所有操作在Visual StudioNET IDE将TestDbReadWritecsproj 作为工程文件打开就可以编译它在MainConsolecs中改变DB_CONN_STRIN的值让其指向SimpleTestmdb编译它
结论
现在你可以在C#中执行基础数据库操作了找时间学学SQL也要多读些有关它工作原理的文章如果你感到厌倦了到上去看一下更新的代码