ホームページ データベース mysql チュートリアル 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Acc

黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Acc

Jun 07, 2016 pm 03:43 PM
enterprise microsoft

企业库数据库访问模块通过抽象工厂模式 , 允许用户通过简单的配置选择不同的数据库作为程序的数据源 , 大大解决了切换数据库时带来的麻烦 . 因为我本机只安装了 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数据库:

黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Acc

2.   下载安装好MicrosoftEnterprise Library 5.0,然后在运行EntLibConfig.exe,选择Blocks菜单 ,单击 AddDatabase Settings .

黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Acc

 

3.    配置好文件之后保存为App.config文件,并添加到创建好的应用程序中.并添加相应的引用,在此我不再多讲,大家下载我打包好的程序运行即可看到

 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Acc

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");
IEnumerable
string> 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());
}
}

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

3 つの簡略化された手順で Microsoft Edge の枠線を簡単に削除します 3 つの簡略化された手順で Microsoft Edge の枠線を簡単に削除します Sep 02, 2023 pm 02:57 PM

多くのユーザーは、Microsoft Edge の Web ページの周囲の白い境界線に不満を抱いています。彼らは、これは不必要で気が散るものだと考えており、Microsoftに対し、Microsoft Edgeのベゼルを完全に削除するよう求めている。これは「壊れていないものは直すな」ということわざに似ていますが、Microsoft はこれを考慮していないようです。もちろん、組み込みの広告ブロッカー、追跡防止、パスワード マネージャーなど、さまざまな機能を提供する人気の Web ブラウザーです。ただし、一部のユーザーは、ブラウザーの Web ページの周囲に境界線があることに気づく場合があります。この境界線は邪魔になったり、見苦しい場合があります。境界線を削除するにはいくつかの方法があります。 r/Edge での長い会話の中で、一部の一般非社内ユーザーは次のことを発見しました。

Microsoft 365 Copilot、Bing Chat Enterprise、Windows の Copilot の主な違い Microsoft 365 Copilot、Bing Chat Enterprise、Windows の Copilot の主な違い Sep 23, 2023 pm 03:57 PM

現在、Microsoft は企業顧客に Microsoft365Copilot、BingChatEnterprise、Windows の Copilot の 3 つの異なる AI アシスタントを提供しています。これら 3 つのオプションの違いについて説明したいと思います。 CopilotinWindows: Windows の Copilot は、タスクをより速く簡単に完了するのに役立つ強力なツールです。タスクバーから、または Win+C を押すことによって Copilot にシームレスにアクセスでき、使用するアプリケーションの横にヘルプが表示されます。 Windows の Copilot は、新しいアイコン、新しいユーザー エクスペリエンス、BingChat を備えています。 2になります

Windows 10でMicrosoftアカウントにログインする方法 Windows 10でMicrosoftアカウントにログインする方法 Jan 01, 2024 pm 05:58 PM

win10システムではMicrosoftアカウントでログインできますが、ログイン方法がわからない友達もたくさんいますので、今日はwin10のMicrosoftアカウントでログインする方法をお届けします。 。 win10 Microsoft アカウントにログインする方法: 1. 左下隅の [スタート] をクリックし、歯車をクリックして設定を開きます。 2. 次に、「アカウント」を見つけてクリックして開きます。 3. アカウントを入力したら、左側の「メールとアプリのアカウント」をクリックします。 4. 次に、右側の「アカウントを追加」をクリックします。 5. アカウントインターフェイスに入ると、多くのオプションが表示されるので、最初の「outlook」をクリックします。 6. 表示される Microsoft アカウント ウィンドウにアカウント番号を入力します。 7. すべてが完了したら、次のことができます。

修正: このアプリ パッケージのインストールはサポートされていません 修正: このアプリ パッケージのインストールはサポートされていません Apr 13, 2023 am 11:43 AM

Microsoft は、UWP (ユニバーサル Windows プラットフォーム) およびデスクトップ アプリケーションを .msixbundle として配布します。 .Windows のアプリと AppxBundle アプリ パッケージ。 Msixbundle、Appx、および AppxPackage インストーラーはアプリ パッケージをサイドロードする信頼性の高い方法ですが、複数のユーザーがこれを行うことはできません。 「アプリパッケージはサポートされていません」というエラーが表示されるのはなぜですか?読者の中には「すべきだ」というメッセージを受け取った人もいます。

Windows 12は無料アップグレードとなり、サブスクリプションは必要ありません Windows 12は無料アップグレードとなり、サブスクリプションは必要ありません Oct 21, 2023 am 11:17 AM

Microsoft はサブスクリプションベースの Windows 12 バージョンには対応していないため、料金は請求されません。 Windows 12 はサブスクリプションベースであるという噂が今でも話題になっていますが、これは Windows 11 プレビュー ビルド内の一連のコードに基づいた噂です。 Microsoft が Windows の次期バージョンをどのようにサブスクリプション モデルにするつもりなのか、まだ疑問に思っている人もいます。一部のメディアで取り上げられた噂は、Windows vNextではなく、Windows 11をベースとした「IoT Enterprise Subscription」だったことが判明した。知らない人のために説明すると、Windows24H2 または WindowsvNext は Windows 12 の公開名です。一部のメディアが勝つだろう

エンタープライズとはどのバージョンですか? エンタープライズとはどのバージョンですか? Jan 12, 2021 am 10:55 AM

enterprise は、Windows システムのエンタープライズ バージョンです。Windows エンタープライズ バージョンは、主に大企業および中規模企業を対象としており、Direct Access、Windows To Go Creator、AppLokcer、BranchCache などのさまざまな実用的な機能が追加されています。

OneDrive の「アカウントは現在利用できません」エラーを修正する OneDrive の「アカウントは現在利用できません」エラーを修正する Sep 13, 2023 am 08:33 AM

Windows にログインしようとしても機能しません。ただし、Microsoft アカウントを確認したところ、問題がないことがわかりました。 Windows および Web 上で Microsoft アカウントにログインおよびログアウトでき、すべてのサービスにアクセスできます。 OneDrive のみが影響を受けるようです。 Microsoft のエラー メッセージは、ほとんどの場合と同様、一般的すぎてあまり役に立ちません。これは次の文で始まります: 「異常に大量のトラフィックが発生しているため、OneDrive またはプロファイルが一時的にブロックされている可能性があります。この場合、ブロックは 24 時間後に削除されます。」 これに別の文が続き、「その他の考えられる理由」アカウントの一時停止の対象となるものは次のとおりです。

Windows 11 および Windows 365 に Clipchamp をダウンロードしてインストールする方法 Windows 11 および Windows 365 に Clipchamp をダウンロードしてインストールする方法 Aug 01, 2023 pm 11:34 PM

昨年 9 月に、Microsoft が Clickchamp を買収し、それを Windows ネイティブ アプリケーションにする予定であることをお知らせしました。最近、レドモンドのテクノロジー大手が最新の DevChannelInsider バージョンにソフトウェアを追加する予定であることを発見しました。 Clipchamp では、ユーザーは、100 万を超えるロイヤリティフリーのビデオ、オーディオ トラック、ビデオに追加できる画像が詰まったストック ライブラリなど、さらにユニークなサービスを見つけることができると言われています。 70 を超える言語でナレーションを作成できる、Azure を利用したテキスト読み上げジェネレーターもあります。 Clipchamp は OneDrive とも接続するため、迅速かつ安全にアクセスできます。

See all articles