黄聪: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());
}
}

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Derzeit bietet Microsoft Unternehmenskunden drei verschiedene KI-Assistenten an: Microsoft365Copilot, BingChatEnterprise und Copilot in Windows. Wir möchten Ihnen die Unterschiede zwischen diesen drei Optionen erläutern. CopilotinWindows: CopilotinWindows ist ein leistungsstarkes Tool, mit dem Sie Aufgaben schneller und einfacher erledigen können. Sie können über die Taskleiste oder durch Drücken von Win+C nahtlos auf Copilot zugreifen und es bietet Hilfe neben jeder von Ihnen verwendeten Anwendung. Copilot in Windows bietet neue Symbole, ein neues Benutzererlebnis und BingChat. es wird 2 sein

Viele Benutzer sind mit dem weißen Rand um Webseiten in Microsoft Edge unzufrieden. Sie halten es für unnötig und ablenkend und fordern Microsoft auf, die Blenden von Microsoft Edge vollständig zu entfernen. Dies ähnelt dem Sprichwort „Repariere nicht, was nicht kaputt ist“, aber Microsoft scheint dies nicht berücksichtigt zu haben. Natürlich handelt es sich um einen beliebten Webbrowser, der eine Vielzahl von Funktionen bietet, darunter einen integrierten Werbeblocker, Tracking-Schutz und einen Passwort-Manager. Einige Benutzer stellen jedoch möglicherweise fest, dass der Browser Webseiten umrandet. Dieser Rand kann störend oder unansehnlich sein und es gibt verschiedene Möglichkeiten, ihn zu entfernen. In einem längeren Gespräch auf r/Edge stellten einige regelmäßige, nicht interne Benutzer fest:

Microsoft arbeitet nicht mit abonnementbasierten Versionen von Windows 12 und es werden Ihnen keine Gebühren berechnet. Es wird immer noch darüber geredet, dass Windows 12 abonnementbasiert sei, ein Gerücht, das auf einer Codefolge in einem Vorschau-Build von Windows 11 basiert. Manche fragen sich immer noch, wie Microsoft seine nächste Windows-Version auf ein Abo-Modell umstellen will. Es stellte sich heraus, dass es sich bei dem in einigen Medien diskutierten Gerücht um ein „IoT Enterprise Subscription“ auf Basis von Windows 11 und nicht um Windows vNext handelte. Für diejenigen, die es nicht wissen: Windows24H2 oder WindowsvNext ist der öffentliche Name für Windows 12. Einige Medien werden gewinnen

Sie können sich mit einem Microsoft-Konto im Win10-System anmelden, aber es gibt immer noch viele Freunde, die nicht wissen, wie man sich anmeldet. Heute werde ich Ihnen die Methode vorstellen, sich mit einem Win10-Microsoft-Konto anzumelden . So melden Sie sich bei einem Win10-Microsoft-Konto an: 1. Klicken Sie unten links auf „Start“ und dann auf das Zahnrad, um die Einstellungen zu öffnen. 2. Suchen Sie dann nach „Konto“ und klicken Sie zum Öffnen. 3. Klicken Sie nach der Eingabe des Kontos links auf „E-Mail- und App-Konten“. 4. Klicken Sie dann rechts auf „Konto hinzufügen“. 5. Nach dem Aufrufen der Kontooberfläche werden viele Optionen angezeigt. Klicken Sie auf den ersten „Outlook“. 6. Geben Sie Ihre Kontonummer in das angezeigte Microsoft-Kontofenster ein. 7. Nachdem alles abgeschlossen ist

Microsoft vertreibt UWP- (Universal Windows Platform) und Desktop-Anwendungen als .msixbundles. Apps und AppxBundle-App-Pakete in .Windows. Obwohl die Installationsprogramme Msixbundle, Appx und AppxPackage zuverlässige Möglichkeiten zum Querladen von App-Paketen darstellen, ist dies nicht für mehrere Benutzer möglich. Warum erhalte ich die Fehlermeldung „App-Paket wird nicht unterstützt“? Einige unserer Leser haben das „Sollte“ erhalten

Enterprise ist die Enterprise-Version des Windows-Systems. Die Windows-Enterprise-Version richtet sich hauptsächlich an große und mittlere Unternehmen. Sie verfügt über eine Vielzahl praktischer Funktionen wie Direct Access, Windows To Go Creator, AppLokcer, BranchCache usw.

Auch der Versuch, sich unter Windows anzumelden, funktioniert nicht. Eine Überprüfung des Microsoft-Kontos ergab jedoch, dass es keine Probleme damit gab. Ich kann mich unter Windows und im Web bei meinem Microsoft-Konto an- und abmelden und auf alle Dienste zugreifen. Nur OneDrive scheint betroffen zu sein. Die Fehlermeldung von Microsoft ist, wie so oft, nicht sehr hilfreich, da sie zu allgemein ist, um von großem Nutzen zu sein. Es beginnt mit der folgenden Aussage: „Ihr OneDrive oder Ihr Profil ist möglicherweise vorübergehend blockiert, weil dort ungewöhnlich viel Datenverkehr herrscht. In diesem Fall wird die Blockierung nach 24 Stunden aufgehoben.“ Darauf folgt ein weiterer Satz: „Andere mögliche Gründe“. für eine vorübergehende Kontosperrung sind aufgeführt: „

Bereits im September letzten Jahres haben wir Sie darüber informiert, dass Microsoft Clickchamp gerade gekauft hat und plant, daraus eine native Windows-Anwendung zu machen. Kürzlich haben wir erfahren, dass der Technologieriese aus Redmond die Software in der neuesten DevChannelInsider-Version hinzufügen wird. In Clipchamp sollen Nutzer einzigartigere Angebote finden, etwa eine Stock-Bibliothek mit mehr als einer Million lizenzfreien Videos, Audiospuren und Bildern, die zu Videos hinzugefügt werden können. Es gibt sogar einen Azure-basierten Text-to-Speech-Generator, der Voiceovers in mehr als 70 Sprachen erstellen kann. Clipchamp verbindet sich auch mit OneDrive, sodass Sie schnell und sicher zugreifen können
