扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
简介
访问数据库是大多数应用程序的一部分,而且随着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:CSTestDbReadWriteSimpleTest.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(
" Row(s) Added = " + nNoAdded + " " );
注意: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'";
关于例子代码
下载工程文件
下载源代码文件
这个例子是一个简单的控制台应用程序,它在一个给定的Microsoft Access 数据库上进行每一个数据库操作.要编译它,在Visual Studio.NET IDE中打开TestDbReadWrite.csproj工程文件.将MainConsole.cs中的DB_CONN_STRING变量改变,使它指向SimpleTest.mdb,编译然后你就可以运行了.
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者