分享
 
 
 

使用C#语言操作ADO数据库

王朝c#·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

访问数据库是大多数应用程序的一部分,而且随着C#和ADO.NET的发布,这个过程已经变得相当的简单.本文将展示下面四个基本的数据库操作:

1.读数据.这包括诸如整数,字符串和日期等不同的数据类型.

2.写数据.就象读数据一样我们会写这些通常的数据类型.这是通过SQL语句来实现的.

3.更新或是修改数据.我们还是使用简单SQL语句.

4.删除数据.使用SQL.

这些操作是对一个微软Access 2000数据库进行的,但是SQL或是其它ADO数据源可以通过简单的改变连接字符串来使用.

开始第一步

为了使用ADO类,我们需要包括进ADO.NET命名空间(namespace)和一些精巧的日期类.在你要进行数据库操作的地方加入下列几行代码.它应该被放置在命名空间引入代码行的下面而在类定义的上面.

using System.Data; // 申明变量

using System.Data.ADO; // 数据库

using System.Globalization; // 日期

根据你所参与的工程的类型,你可能需要增加对System.Data命名空间的引用.你可以根据在你添加上面的代码以后编译器是否产生错误来判断.要添加System.Data命名空间,你可以:

1.在Solution explorer-References 分支中右键单击.

2.选择"添加引用"

3.选择.NET Framework标签.

4.双击System.data.dll条目

5.单击OK

6.System.Data现在应该出现在了Solution explorer的引用列表中了.

因为连接字符串在大多数操作中都要使用,所以我建议你将它设置成你要编写的类的成员.注意:在你的程序中,数据库文件的路径有可能不同.

//属性

public const string DB_CONN_STRING =

"Driver={Microsoft Access Driver (*.mdb)}; "+

"DBQ=D:\\CS\\TestDbReadWrite\\SimpleTest.mdb";

读数据

现在一切都变得有趣起来.读数据可以通过ADODataReader类来实现.(参看Chris Maunder的文章"ADO.NET ADODataReader类"来获取关于这个类的更多信息.)读数据的步骤如下:

1.我们用ADOConnection来打开一个数据库.

ADOConnection conn =

new ADOConnection(DB_CONN_STRING);

conn.Open();

2.我们编写一个SQL语句来定义将要取出的数据.这个数据执行的结果是返回一个ADODataReader 对象.注意Execute方法中的out关键字.这在C#中意味着通过引用传递参数.

ADODataReader dr;

ADOCommand cmd =

new ADOCommand( "SELECT * FROM Person", conn );

cmd.Execute( out dr);

3.我们循环遍历ADODataReader中的每一个记录直到我们完成要做的工作.注意:数据被直接作为一个字符串返回同时数据域名称用来指明读的数据域.

while( dr.Read() )

{

System.Console.WriteLine( dr["FirstName"] );

}

4.我们收工

但是,作为好的程序员我们还需要加进许多try/catch/finally语句来确保我们处理了所有的错误.

try

{

.... 数据库操作 ...

}

catch( Exception ex )

{

System.Console.WriteLine( "READING:" );

System.Console.WriteLine( " ERROR:" + ex.Message );

System.Console.WriteLine( " SQL :" + sSqlCmd );

System.Console.WriteLine( " Conn.:" + DB_CONN_STRING );

}

finally

{

// 关闭连接

if( conn.State == DBObjectState.Open )

conn.Close();

}

读取不同的数据类型

dr["stuff"]这个语句通常能够返回一个数据.但是要返回一个int或者DateTime对象的话通常需要进行数据转换.这通常可以通过使用ADODataReader许多内建转换器中的一个来实现.也就是:

int nOrdinalAge = dr.GetOrdinal( "Age" );

int nAge = dr.GetInt32( nOrdinalAge );

DateTime tUpdated = (DateTime)dr["Updated"];

注意GetOrdinal定位数据域用名字来读取数据的用法.如果数据域是空白的(还没有填入任何数据),上面的代码会抛出一个异常.要捕捉这种情况,我们可以用IsNull方法检查是否有数据存在,如下所示:

int nOrdinalAge = dr.GetOrdinal( "Age" );

if( dr.IsNull( nOrdinalAge ) )

{

System.Console.WriteLine( " Age : Not given!" );

}

else

{

int nAge = dr.GetInt32( nOrdinalAge );

System.Console.WriteLine( " Age : " + nAge );

}

插入,修改,删除和其他SQL命令

插入,修改,删除过程可以非常容易的通过SQL语句来实现.下面的代码执行一条SQL命令来插入一条记录.

// SQL 命令

String sSQLCommand =

"INSERT INTO Person (Age, FirstName, Description,

Updated) " +

"VALUES( 55, 'Bob', 'Is a Penguin', '2001/12/25 20:30:15' );";

// 创建command对象

ADOCommand cmdAdder = new ADOCommand(

sSQLCommand,

DB_CONN_STRING);

cmdAdder.ActiveConnection.Open();

// Execute the SQL command

int nNoAdded = cmdAdder.ExecuteNonQuery();

System.Console.WriteLine(

"\nRow(s) Added = " + nNoAdded + "\n" );

注意:try/catch代码没有在上面的例子里出现,但是应该包括上面的代码.

插入

上面的代码通过建立一个SQL命令然后执行它来插入一条记录.一些在编写SQL命令时应注意的事项如下:

1.数值数据应该直接表示.没有单引号(').

2.字符串的表示应该包括在单引号中('blah').

3.确保字符串中不包含任何嵌入的单(双)引号.这会使事情混淆.

4.日期和时间数据用包裹在单引号中的国际通用形式来表示

('YYYY/MM/DD HH:MM:SS').

修改

UPDATE命令指明要修改的数据和修改的动作.ExecuteNonQuery()的返回值指出改变的记录的个数,所以如果有5个Peter's在表单中的话下面的代码将返回5.

String sSQLCommand =

"UPDATE Person SET Age = 27 WHERE FirstName = 'Peter'";

删除

DELETE命令指明要删除的记录.ExecuteNonQuery()的返回值指出改变的记录的个数,所以如果有2个Bobo在表单中的话下面的代码将返回2.两个Bobo都会被删除.

String sSQLCommand =

"DELETE FROM Person WHERE FirstName = 'Bobo'&quot";

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有