using System.Data
using Microsoft.Practices.EnterpriseLibrary.Data
下面列出一些模块常用的获取数据、更新数据方法,其中有一些和直接使用ADO.NET中的方法很相似:
方法
功能
ExecuteDataset,创建,加载,返回数据集
LoadDataSet,加载数据到一个已经存在的数据集
TransactionScope,支多项事务同时执行,一旦发生异常则会回滚所有 *** 作
填充一个数据集,使用数据集更新数据库
ExecuteReader,创建,返回一个provider独立的DbDataReader实例
从数据库读取多行数据
ExecuteNonQuery,执行command,返回数据库受影响的行数,可以通过output返回多个值
ExecuteScalar,执行command,返回单个值第一行第一列的值
执行command数据库命令对象
ExecuteSproAccessor,使用存储过程返回一个客户端可以查询的序列对象
ExecuteSqlStringAccessor,使用SQL语句返回一个客户端可以查询的序列对象
以序列对象的形式返回数据
ExecuteXmlReader,返回xml格式的数据,xmlReader类型,这个只能用在SQL Server数据库,通过SqlDatabase类调用,Database类中没有这个方法。
获取xml格式数据(只能用在SQL Server数据库)
GetStoredProcCommand,返回一个存储过程的数据库command对象
GetSqlStringCommand,返回一个SQL语句的数据库command对象
创建一个Command对象
AddInParameter,创建一个新的input参数,并且加入command的参数集合
AddOutParameter,创建一个新的output参数,并且加入command的参数集合
AddParameter,创建一个指定类型的参数,并且加入command的参数集合
GetParameterValue,以Object类型返回指定参数的值
SetParameterValue,给指定参数赋值
处理command的参数
CreateConnection,创建,返回当前数据库的连接,允许你通过这个链接初始化和管理数据库事务
处理数据库事务
下面我们通过案例来演示以上常用的方法的使用:
1、 首先我们来编辑配置文件:
在菜单栏中选定Blocks>Add Data Setting来添加数据库的类型和连接字符串
[转载]如何使用微软企业库对数据库的访问
name
由应用程序访问的数据库实例的逻辑名称。在节中,名称必须是唯一的。此属性是必须的。
providerName
提供程序的名称。默认情况下,提供程序的名称定义在 Machine.config 文件中。providerName 名称必须是一个在 DBProviderFactory 类中指定的提供程序的名称。此属性是必须的。
connectionString
可用于被选的提供程序的连接字符串,此属性是必须的。
首先我们实例化一个DataBase
private static Database db = DatabaseFactory.CreateDatabase("Test")
1. ExecuteDataset:创建,加载,返回数据集,ExecuteScalar返回单个值第一行第一列的值
string sql = "select * from [User]"
DbCommand com = db.GetSqlStringCommand(sql)
//执行并返回数据集
rptTest.DataSource = db.ExecuteDataSet(com).Tables[0]
rptTest.DataBind()
[转载]如何使用微软企业库对数据库的访问
2 . LoadDataSet,加载数据到一个已经存在的数据集
private void LoadDataSet()
{
DataSet table
string sql = "select * from [User]"
DbCommand com = db.GetSqlStringCommand(sql)
DbCommand com1 = db.GetSqlStringCommand(sql)
table = db.ExecuteDataSet(com1)
// 执行com 并将所得到得结果追加的数据集table中
db.LoadDataSet(com, table, "table")
rptTest.DataSource = table.Tables["table"]
rptTest.DataBind()
}
[转载]如何使用微软企业库对数据库的访问
3.ExecuteReader,创建,返回一个provider独立的DbDataReader实例
private void ExecuteReader()
{
string sql = "select * from [User]"
DbCommand com = db.GetSqlStringCommand(sql)
IDataReader read = db.ExecuteReader(com)
Label1.Text=" <div class='left title'>姓名</div>
<div class='right title'>邮箱</div>
<div style='clear: bothwidth:200px'>"
while (read.Read())
{
//获取该列的所有信息
object[] values = new object[3]
read.GetValues(values)
Label1.Text += "<div class='left'>" + values[0].ToString() + "</div>" + "<div class='left'>" + values[2].ToString() + "</div>"
}
Label1.Text += "</div>"
read.Close()
}
[转载]如何使用微软企业库对数据库的访问
4. ExecuteScalar,执行command,返回单个值第一行第一列的值
string sql = "select * from [User]"
DbCommand com = db.GetSqlStringCommand(sql)
bl.Text = string.Format("第一行第一列的数据:{0}", db.ExecuteScalar(com).ToString())
[转载]如何使用微软企业库对数据库的访问
5. GetSqlStringCommand方法用于 SQL 文本命令
protected void Page_Load(object sender, EventArgs e)
{
select()
}
private void getSqlStringCommand(string sqlQuery)
{
//GetSqlStringCommand方法的使用
DbCommand com = db.GetSqlStringCommand(sqlQuery)
db.ExecuteNonQuery(com)
select()
}
//为了区别添加数据跟已有数据区分开来
private static int ID = 0
//插入数据
protected void Insert_Click(object sender, EventArgs e)
{
getSqlStringCommand("insert[User] values('江苏迈瑞" + (ID++).ToString() + "'," + "'www.maxray.com','hr@maxray.cn') ")
}
//查询信息
private void select()
{
string sqlQuery = "select * from [User] "
DbCommand com = db.GetSqlStringCommand(sqlQuery)
rptGetSqlStringCommand.DataSource = db.ExecuteDataSet(com).Tables[0]
rptGetSqlStringCommand.DataBind()
}
//删除信息
protected void bntDelete_Click(object sender, EventArgs e)
{
getSqlStringCommand("delete [User] where UserName='江苏迈瑞"
+ (ID--).ToString()+"'")
}
//更新数据
protected void update_Click(object sender, EventArgs e)
{
getSqlStringCommand("update [User]
set UserName='updata_江苏迈瑞'
where UserName='测试1' ")
}
[转载]如何使用微软企业库对数据库的访问
6. GetStoredProcCommand方法用于执行存储过程命令
private void getStoredProcCommand()
{
//执行存储过程 (不带参数)
DbCommand com = db.GetStoredProcCommand("proc_list")
rptGetStoredProcCommand.DataSource = db.ExecuteDataSet(com).Tables[0]
rptGetStoredProcCommand.DataBind()
}
[转载]如何使用微软企业库对数据库的访问
7.参数处理(存储过程和T-Sql中的参数)
1. Database中的GetStoredProcCommand方法用于执行存储过程命令。
2. Database中的GetSqlStringCommand方法用于 SQL 文本命令。
二个方法都返回一个DbCommand对象。
(1)sql语句中的参数处理
string sql = "select * from [User] where ID=@ID "
DbCommand com=db.GetSqlStringCommand(sql)
//添加参数
db.AddInParameter(com, "@ID", DbType.Int32, 1)
rptTest.DataSource = db.ExecuteDataSet(com).Tables[0]
rptTest.DataBind()
(2)存储过程中的参数处理(参数以“proc_“为存储过程)
a)参数发现
//直接指定参数的值,在这里要注意参数出现的顺序应与存储过程中的顺序相同
。如果数据类型转换失败,则报出异常。
DbCommand com = db.GetStoredProcCommand("proc_Test",
"测试",
12)
db.ExecuteNonQuery(com)
b) 处理参数
AddInParameter,创建一个新的input参数,并且加入command的参数集合
AddOutParameter,创建一个新的output参数,并且加入command的参数集合
AddParameter,创建一个指定类型的参数,并且加入command的参数集合
GetParameterValue,以Object类型返回指定参数的值
private void GetStoredProcCommand()
{
DbCommand com = db.GetStoredProcCommand("proc_Login")
//设置指定参数的值、类型
db.AddInParameter(com, "@Psd", DbType.Int32, 12)
db.AddInParameter(com, "@UserName", DbType.String, "1212")
//获取数据库中的返回值
db.AddParameter(com, "@retrunvalue", DbType.String, ParameterDirection.ReturnValue, null, DataRowVersion.Current, null)
db.AddOutParameter(com, "@outputEmail", DbType.String, 20)
db.ExecuteNonQuery(com)
string Rvalue=com.Parameters["@retrunvalue"].Value.ToString()
string OEmail= com.Parameters["@outputEmail"].Value.ToString()
string GValue = db.GetParameterValue(com,"@name").ToString()
lblInfo.Text = "<div class='left title'>返回的参数为</div> <br/>
<br/>GetParameterValue=" + GValue +
"<br />AddOutParameter=" + OEmail +
"<br />ReturnValue=" + Rvalue
}
存储过程
ALTER proc [dbo].[proc_Login]
@Psd varchar(50),
@UserName varchar(50) ,
@outputEmail varchar(50) output
AS
BEGIN
set @outputEmail=( SELECT Email FROM [User] WHERE Psd = @Psd and UserName=@UserName)
return @@rowcount
END
[转载]如何使用微软企业库对数据库的访问
8. ExecuteSproAccessor,使用存储过程返回一个客户端可以查询的序列对象
private void executeSproAccessor()
{
var student = db.ExecuteSprocAccessor<Student>("proc_Test",
"江",
1)
Student[] std = student.ToArray()
for (int i = 0i <std.Count<Student>()i++)
{
Label1.Text += std[i].id + " " + std[i].email + " " +
std[i].psd + " " + std[i].username + "<br/>"
}
}
[转载]如何使用微软企业库对数据库的访问
9. ExecuteSqlStringAccessor,使用SQL语句返回一个客户端可以查询的序列对象
private void executeSproAccessor()
{
var student = db.ExecuteSqlStringAccessor<Student>(
"select * from [User]")
Student[] std = student.ToArray()
for (int i = 0i <std.Count<Student>()i++)
{
Label1.Text += std[i].id + " " + std[i].email + " " +
std[i].psd + " " + std[i].username + "<br/>"
}
}
[转载]如何使用微软企业库对数据库的访问
10. ExecuteXmlReader,返回xml格式的数据,xmlReader类型,这个只能用在SQL Server数据库,通过SqlDatabase类调用,Database类中没有这个方法。
private void executeXmlReader ()
{
string sql = "SELECT * FROM [User] FOR XML AUTO"
Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase
sqlDB=(Microsoft.Practices.EnterpriseLibrary.Data.Sql.
SqlDatabase)db
DbCommand cmd = sqlDB.GetSqlStringCommand(sql)
var reader = sqlDB.ExecuteXmlReader(cmd)
string xml= "<?xml version='1.0' encoding='utf-8' ?><root>"
while (!reader.EOF)
{
if ((reader.IsStartElement()))
{
xml += reader.ReadOuterXml()
}
}
xml += "<root>"
Response.Write(xml)
Response.End()
}
[转载]如何使用微软企业库对数据库的访问
11. TransactionScope支多项事务同时执行,一旦发生异常则会回滚所有 *** 作
protected void TransactionScope()
{
// insert *** 作会发生失败,同时会回滚delete事件
string sqlInsert = "insert [User] values('12','江苏迈瑞')"
string sqlDelete = "delete [User] where ID=8"
try
{
using (TransactionScope sp =
new TransactionScope(TransactionScopeOption.RequiresNew))
{
db.ExecuteNonQuery(CommandType.Text, sqlDelete)
db.ExecuteNonQuery(CommandType.Text, sqlInsert)
sp.Complete()
}
}
catch (Exception ex)
{
Response.Write(ex.Message)
}
}
}
Microsoft Access 提供了三种方法来创建 Access 数据库 (Microsoft Access 数据库:数据和对象(如表、查询或窗体)组成的集合,与特定的主题或用途有关。)。可以使用“数据库向导”来创建数据库。通过该向导可以从内置模板中进行选择,然后对其进行一定程度的自定义。随后,该向导会为数据库创建一组表、查询、窗体和报表,同时还会创建切换面板。表中不含任何数据。如果内置模板中的某个模板非常符合您的要求,请使用该方法。
使用“数据库向导”创建数据库
利用“数据库向导”,用一步 *** 作即可为所选数据库类型创建必需的表、窗体和报表。这是创建数据库的最简单方法。该向导提供了有限的选项来自定义数据库。
单击工具栏上的“新建”。
在“新建文件”任务窗格中,在“模板”下,单击“本机上的模板”。
在“数据库”选项卡上,单击要创建的数据库类型的图标,然后单击“确定”。
在“文件新建数据库”对话框中,指定数据库的名称和位置,然后单击“创建”。
按照“数据库向导”的指导进行 *** 作。
如果向导未启动
这可能是因为 Access 正运行于沙盒模式,但您的计算机上尚未安装 Microsoft Jet 4.0 SP8 或更高版本。启用沙盒模式后,必须安装有 Jet 4.0 SP8 或更高版本,Access 才能完全发挥作用。
有关安装 Jet 升级的详细信息,请参阅 Office Online 文章关于 Microsoft Jet 4.0 SP8 或更高版本。
有关沙盒模式的详细信息,请参阅 Office Online 文章关于 Microsoft Jet Expression Service 沙盒模式。
注释 不能使用“数据库向导”向已有的数据库中添加新的表、窗体或报表。
如果正在使用 Access 2003,可以在 <Office Online>中搜索 Access 模板。下载模板是创建数据库的最快方式。如果您找到了非常符合要求的模板,请使用该方法。模板是一个包含表、查询、窗体和报表的 Access 数据库文件 (*.mdb)。表中不含任何数据。打开数据库后,可以自定义数据库和对象。
使用模板创建数据库
这是创建数据库的最快方式。如果能找到并使用与您的要求非常接近的模板,则此方法效果最佳。
在工具栏上单击“新建”。
在“新建文件”任务窗格中,在“模板”下,搜索特定的模板,或单击“Office Online 模板”找到合适的模板。
找到需要的 Access 模板,然后单击“下载”。
如果要基于自己的设计创建数据库,请先创建一个空数据库,然后再分别添加表、窗体、报表及其他对象。这是最灵活的方法,但需要分别定义每一个数据库元素。
不使用“数据库向导”创建空数据库
单击工具栏上的“新建”。
在“新建文件”任务窗格中的“新建”下,单击“空数据库”。
在“文件新建数据库”对话框中,指定数据库的名称和位置,然后单击“创建”。
然后将出现“数据库”窗口 (数据库窗口:在打开 Access 数据库或 Access 项目时出现的窗口。它显示用于新建数据库对象和打开现有对象的快捷方式。),现在便可以在数据库中创建所需的对象 (数据库对象:Access 数据库包含诸如表、查询、窗体、报表、页、宏和模块等对象;Access 项目包含诸如窗体、报表、页、宏和模块等对象。)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)