黄聪: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脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

許多用戶對MicrosoftEdge中網頁周圍的白色邊框不滿意。他們認為這是不必要的和分散注意力的,他們要求Microsoft完全刪除MicrosoftEdge的邊框。這類似於「不要修復沒有損壞的東西」的說法,但Microsoft似乎沒有考慮到這一點。當然,它是一種流行的網路瀏覽器,提供多種功能,包括內建廣告攔截器、追蹤預防和密碼管理器。但是,某些用戶可能會發現瀏覽器在網頁周圍有邊框。此邊框可能會分散注意力或難看,有幾種方法可以將其刪除。在關於r/Edge的冗長對話中,一些普通的非內部用戶發現,

目前,Microsoft為企業客戶提供三種不同的AI助理:Microsoft365Copilot,BingChatEnterprise和Windows中的Copilot。我們想解釋一下這三個選項之間的差異。 CopilotinWindows:Windows中的Copilot是一個功能強大的工具,可幫助您更快,輕鬆地完成任務。您可以從工作列或按Win+C無縫存取Copilot,它將在您使用的任何應用程式旁邊提供協助。 Windows中的Copilot有新圖標,新的使用者體驗和BingChat。它將於2

微軟將UWP(通用Windows平台)和桌面應用程式分發為.msixbundle。應用程式和 .Windows 中的 AppxBundle 應用程式套件。儘管 Msixbundle、Appx 和 AppxPackage 安裝程式是旁加載應用程式套件的可靠方法,但多個使用者無法這樣做。為什麼我會收到“應用程式包不受支援”錯誤?我們的一些讀者在嘗試旁加載應用程式包(尤其是從非官方來源下載的應用程式包)時收到「應

Microsoft帳號是可以在win10系統中登陸的,只是還有很多的小夥伴不知道該怎麼去登陸,今天就為你們帶來了win10microsoft帳號登陸方法,快來一起看看吧。 win10microsoft帳號怎麼登陸:1.點選左下角開始,點選齒輪開啟設定。 2、隨後找到「帳戶」並點選開啟。 3.進入帳戶後點選左側的「電子郵件和應用程式帳戶」。 4、隨後點選右邊的「新增帳戶」。 5.進入帳戶介面後會出現很多的選項,點選第一個「outlook」。 6.再出現的Microsoft帳號視窗中輸入帳號即可。 7.全部完成後即可

嘗試在Windows中登入也不起作用。然而,對Microsoft帳戶的檢查顯示,它沒有問題。我能夠在Windows和Web上登入和登出Microsoft帳戶,並且能夠存取所有服務。只有OneDrive似乎受到影響。 Microsoft的錯誤訊息,就像大多數時候一樣,不是很有幫助,因為它太通用了,沒有多大用處。它以以下語句開頭:「你的OneDrive或設定檔可能會被暫時阻止,因為它遇到了異常大量的流量。在這種情況下,該區塊將在24小時後刪除」接下來是另一句話,列出了可能導致臨時帳戶暫停的其他原因:“

enterprise是Windows系統企業版,Windows企業版主要針對中型企業,其加入了Direct Access、Windows To Go Creator、AppLokcer、BranchCache等多種實用功能。

Microsoft不適用於訂閱制的Windows12版本,也不會向您收取任何費用。人們仍在談論Windows12是基於訂閱的,這是基於Windows11預覽版本中的程式碼字串的謠言。有些人仍然想知道Microsoft計劃如何將他們的下一個版本的Windows作為訂閱模式。事實證明,一些媒體討論的謠言是基於Windows11的“物聯網企業訂閱”,而不是WindowsvNext。對於不知道的人,Windows24H2或WindowsvNext是Windows12的公開名稱。一些媒體將Win

microsoft sql server是Microsoft公司推出的關係型資料庫管理系統,是一個全面的資料庫平台,使用整合的商業智慧(BI)工具提供了企業級的資料管理,具有使用方便可伸縮性好與相關軟體整合程度高等優點。 SQL Server資料庫引擎為關聯式資料和結構化資料提供了更安全可靠的儲存功能,使用戶可以建置和管理用於業務的高可用和高效能的資料應用程式。
