黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Acc
企业库数据库访问模块通过抽象工厂模式 , 允许用户通过简单的配置选择不同的数据库作为程序的数据源 , 大大解决了切换数据库时带来的麻烦 . 因为我本机只安装了 SQL Server 2005, 所以在此只做 SQL 的演示 , 需要深究的朋友可以访问以下网站 : http://msdn.m
企业库数据库访问模块通过抽象工厂模式,允许用户通过简单的配置选择不同的数据库作为程序的数据源,大大解决了切换数据库时带来的麻烦.因为我本机只安装了SQL Server 2005,所以在此只做SQL的演示,需要深究的朋友可以访问以下网站:
http://msdn.microsoft.com/en-us/library/ff664408%28v=PandP.50%29.aspx
企业库数据库访问模块的几大功能:
1. 最简单的功能,通过ExecuteNonQuery.方法执行SQL语句.
2. 执行ExecuteDataSet,返回DataSet类型的数据集.
3. 执行ExecuteScalar,获取返回的第一行第一列的信息.
4. 执行存储过程.
5. 通过代码实现事务.
6. 通过DataSet更新数据库.
7. 返回值XML化.
8. 将返回的数据对象化.
9. 异步访问数据库.
以上的功能我会在下面一一介绍,测试程序我已打包,大家可以点击这里下载.
下面介绍如何使用Microsoft Enterprise Library 5.0中的数据库访问模块.
1. 首先创建一个测试数据库,创建数据库的SQL文件我打包在压缩包里了,大家可以点击上面的下载链接下载.执行完SQL文件后,可以看到我们创建好的TestDB数据库:
2. 下载安装好MicrosoftEnterprise Library 5.0,然后在运行EntLibConfig.exe,选择Blocks菜单 ,单击 AddDatabase Settings .
3. 配置好文件之后保存为App.config文件,并添加到创建好的应用程序中.并添加相应的引用,在此我不再多讲,大家下载我打包好的程序运行即可看到
4. 下面来介绍我在应用程序中实现的各个功能:
(1) 通过ExecuteNonQuery.方法执行SQL语句:
///
/// 执行ExecuteNonQuery
///
privatevoid ExecuteNonQuery_Click(object sender, EventArgs e)
{
db.ExecuteNonQuery(CommandType.Text, "INSERT INTO [College] ([CollegeID],[Name]) values (6,'体育学院')");
}
(2) 执行ExecuteDataSet,返回DataSet类型的数据集.
///
/// 执行ExecuteDataSet,返回College列表
///
///
privatevoid ExecuteDataSet_Click(object sender, EventArgs e)
{
string sql ="select * from College";
DbCommand dw = db.GetSqlStringCommand(sql);
dataGridView1.DataSource = db.ExecuteDataSet(dw).Tables[0];
}
(3) 执行ExecuteScalar,返回第一行第一列的值.
///
/// 执行ExecuteScalar,返回第一行第一列的值
///
///
privatevoid ExecuteScalar_Click(object sender, EventArgs e)
{
Database db = DatabaseFactory.CreateDatabase("ConnectionString");
string sql ="select [Name] from College where [CollegeID] = 1";
DbCommand dc = db.GetSqlStringCommand(sql);
string str ="获取的学院名称为:"+ (string)db.ExecuteScalar(dc);
MessageBox.Show(str);
sql ="select [CollegeID] from College where [CollegeID] = 1";
dc = db.GetSqlStringCommand(sql);
str ="获取的学院ID为:"+ (int)db.ExecuteScalar(dc);
MessageBox.Show(str);
}
(4) 执行存储过程.
///
/// 执行存储过程
///
privatevoid StoredProcCommand_Click(object sender, EventArgs e)
{
DbCommand dc = db.GetStoredProcCommand("usp_College_LoadByID");
db.AddInParameter(dc, "@CollegeID", System.Data.DbType.Int32, 5);
dataGridView1.DataSource = db.ExecuteDataSet(dc).Tables[0];
}
(5) 通过代码实现事务.
///
/// 事务
///
privatevoid Transaction_Click(object sender, EventArgs e)
{
DbCommand dc1 = db.GetStoredProcCommand("usp_College_Insert");
db.AddInParameter(dc1, "@CollegeID", DbType.Int32, 7);
db.AddInParameter(dc1, "@Name", DbType.String, "文旅学院");
DbCommand dc2 = db.GetStoredProcCommand("usp_College_Insert");
db.AddInParameter(dc2, "@CollegeID", DbType.Int32, 7);
db.AddInParameter(dc2, "@Name", DbType.String, "化工学院");
using (DbConnection conn = db.CreateConnection())
{
conn.Open();
DbTransaction trans = conn.BeginTransaction();
try
{
//添加一个ID为7的学院
db.ExecuteNonQuery(dc1, trans);
//添加一个ID为7的学院,主键重复,事务将回滚
db.ExecuteNonQuery(dc2, trans);
//提交事务.
trans.Commit();
}
catch
{
//回滚
trans.Rollback();
}
conn.Close();
}
//查看数据库,数据未被添加,说明事务已回滚
ExecuteDataSet_Click(null, null);
}
(6) 通过DataSet更新数据库.
///
/// 通过DataSet更新数据库
///
privatevoid DataSetUpdate_Click(object sender, EventArgs e)
{
DataSet productsDataSet =new DataSet();
string sql ="Select * From College";
DbCommand cmd = db.GetSqlStringCommand(sql);
string CollegeTableName ="College";
//恢复原始数据
db.LoadDataSet(cmd, productsDataSet, CollegeTableName);
//获取数据表格
DataTable dTable = productsDataSet.Tables[CollegeTableName];
//添加一个新信息入DataSet中
DataRow addedRow = dTable.Rows.Add(newobject[] { 8, "外国语学院" });
//修改一个原有数据
dTable.Rows[0]["Name"] ="国教院";
//提供插入,更新,删除存储过程
DbCommand insertCommand = db.GetStoredProcCommand("usp_College_Insert");
db.AddInParameter(insertCommand, "@CollegeID", DbType.Int32, "CollegeID", DataRowVersion.Current);
db.AddInParameter(insertCommand, "@Name", DbType.String, "Name", DataRowVersion.Current);
DbCommand deleteCommand = db.GetStoredProcCommand("usp_College_Delete");
db.AddInParameter(deleteCommand, "@CollegeID", DbType.Int32, "CollegeID", DataRowVersion.Current);
DbCommand updateCommand = db.GetStoredProcCommand("usp_College_Update");
db.AddInParameter(updateCommand, "@CollegeID", DbType.Int32, "CollegeID", DataRowVersion.Current);
db.AddInParameter(updateCommand, "@Name", DbType.String, "Name", DataRowVersion.Current);
//通过DataSet更新数据库
int rowsAffected = db.UpdateDataSet(productsDataSet, CollegeTableName, insertCommand, updateCommand, deleteCommand,
Microsoft.Practices.EnterpriseLibrary.Data.UpdateBehavior.Standard);
MessageBox.Show("影响的行数:"+ rowsAffected);
}
(7) 返回值XML化.
///
/// 返回值XML化
///
privatevoid ReturnXML_Click(object sender, EventArgs e)
{
//使用"FOR XML AUTO"参数使得SQL返回XML格式的信息
SqlDatabase sqldb = (SqlDatabase)DatabaseFactory.CreateDatabase("ConnectionString");
DbCommand cmd = sqldb.GetSqlStringCommand("SELECT * FROM College FOR XML AUTO");
IEnumerablestring> productList;
using (var reader = sqldb.ExecuteXmlReader(cmd))
{
if (reader.IsStartElement())
{
var root = (XElement)XNode.ReadFrom(reader);
productList = root.Elements("CollegeID")
.Attributes("Name")
.Select(a => a.Value).ToArray();
MessageBox.Show(((XElement)root).ToString());
}
}
}
(8) 将返回的数据对象化.
///
/// DataAsObject
///
privatevoid DataAsObject_Click(object sender, EventArgs e)
{
//将返回的数据对象化
var results = db.ExecuteSprocAccessorCollege>("usp_College_LoadAll");
MessageBox.Show(results.ElementAt(0).ToString());
}
(9) 异步访问数据库.
///
/// 异步访问数据库
///
privatevoid Async_Click(object sender, EventArgs e)
{
//创建新的数据库连接,属性必须添加:Asynchronous Processing=true
String connectionString =@"server=(local); database=TestDB; Integrated Security=true; Asynchronous Processing=true";
Database Sqldb =new SqlDatabase(connectionString);
DbCommand cmd = Sqldb.GetStoredProcCommand("usp_College_LoadbyID");
Sqldb.AddInParameter(cmd, "@CollegeID", DbType.Int32, 1);
try
{
IAsyncResult result = Sqldb.BeginExecuteReader(cmd, MyEndExecuteCallback, Sqldb);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
//当获取完毕执行该函数
privatevoid MyEndExecuteCallback(IAsyncResult result)
{
try
{
Database Sqldb = (Database)result.AsyncState;
IDataReader reader = db.EndExecuteReader(result);
College c =new College((int)reader[0], (string)reader[1]);
MessageBox.Show(c.ToString());
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

目前,Microsoft为企业客户提供三种不同的AI助手:Microsoft365Copilot,BingChatEnterprise和Windows中的Copilot。我们想解释一下这三个选项之间的区别。CopilotinWindows:Windows中的Copilot是一个功能强大的工具,可帮助您更快,轻松地完成任务。您可以从任务栏或按Win+C无缝访问Copilot,它将在您使用的任何应用程序旁边提供帮助。Windows中的Copilot具有新图标,新的用户体验和BingChat。它将于2

许多用户对MicrosoftEdge中网页周围的白色边框不满意。他们认为这是不必要的和分散注意力的,他们要求Microsoft完全删除MicrosoftEdge的边框。这类似于“不要修复没有损坏的东西”的说法,但Microsoft似乎没有考虑到这一点。当然,它是一种流行的网络浏览器,提供多种功能,包括内置广告拦截器、跟踪预防和密码管理器。但是,某些用户可能会发现浏览器在网页周围有边框。此边框可能会分散注意力或难看,有几种方法可以将其删除。在关于r/Edge的冗长对话中,一些普通的非内部用户发现,

Microsoft不适用于基于订阅的Windows12版本,也不会向您收取任何费用。人们仍在谈论Windows12是基于订阅的,这是一个基于Windows11预览版本中的代码字符串的谣言。有些人仍然想知道Microsoft计划如何将他们的下一个版本的Windows作为订阅模式。事实证明,一些媒体讨论的谣言是基于Windows11的“物联网企业订阅”,而不是WindowsvNext。对于那些不知道的人,Windows24H2或WindowsvNext是Windows12的公开名称。一些媒体将Win

Microsoft账户是可以在win10系统中登陆的,只是还有很多的小伙伴不知道该怎么去登陆,今天就给你们带来了win10microsoft账户登陆方法,快来一起看看吧。win10microsoft账户怎么登陆:1、点击左下角开始,点击齿轮打开设置。2、随后找到“账户”并点击打开。3、进入账户后点击左侧的“电子邮件和应用账户”。4、随后点击右边的“添加账户”。5、进入账户界面后会出现很多的选项,点击第一个“outlook”。6、再出现的Microsoft账户窗口中输入账号即可。7、全部完成后即可

微软将UWP(通用Windows平台)和桌面应用程序分发为.msixbundle。应用和 .Windows 中的 AppxBundle 应用包。尽管 Msixbundle、Appx 和 AppxPackage 安装程序是旁加载应用包的可靠方法,但多个用户无法这样做。为什么我会收到“应用包不受支持”错误?我们的一些读者在尝试旁加载应用包(尤其是从非官方来源下载的应用包)时收到“应

尝试在Windows中登录也不起作用。然而,对Microsoft账户的检查显示,它没有问题。我能够在Windows和Web上登录和注销Microsoft帐户,并且能够访问所有服务。只有OneDrive似乎受到影响。Microsoft的错误消息,就像大多数时候一样,不是很有帮助,因为它太通用了,没有多大用处。它以以下语句开头:“你的OneDrive或配置文件可能会被暂时阻止,因为它遇到了异常大量的流量。在这种情况下,该块将在24小时后删除”接下来是另一句话,列出了可能导致临时帐户暂停的其他原因:“

enterprise是Windows系统企业版,Windows企业版主要面向大中型企业,其加入了Direct Access、Windows To Go Creator、AppLokcer、BranchCache等多种实用功能。

早在去年九月,我们就通知您,Microsoft刚刚购买了Clickchamp,并计划将其作为Windows本机应用程序。最近,我们发现这家雷德蒙德科技巨头将在最新的DevChannelInsider版本中添加该软件。在Clipchamp中,据说用户发现了更多独特的产品,比如一个库存库,里面装满了超过一百万个免版税的视频、音轨和可以添加到视频中的图像。甚至还有一个由Azure提供支持的文本到语音生成器,能够以70多种语言创建画外音。Clipchamp还与OneDrive连接,这意味着您可以快速安全
