데이터 베이스 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 Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

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이라는 세 가지 AI 도우미를 제공합니다. 이 세 가지 옵션의 차이점을 설명하고 싶습니다. CopilotinWindows: Windows의 Copilot은 작업을 더 빠르고 쉽게 완료하는 데 도움이 되는 강력한 도구입니다. 작업 표시줄에서 또는 Win+C를 눌러 Copilot에 원활하게 액세스할 수 있으며 사용하는 모든 응용 프로그램 옆에 도움말이 제공됩니다. Windows의 Copilot에는 새로운 아이콘, 새로운 사용자 환경 및 BingChat이 포함되어 있습니다. 2가 될 거야

간단한 3단계로 Microsoft Edge에서 테두리를 쉽게 제거하세요 간단한 3단계로 Microsoft Edge에서 테두리를 쉽게 제거하세요 Sep 02, 2023 pm 02:57 PM

많은 사용자가 Microsoft Edge의 웹 페이지 주변에 있는 흰색 테두리에 불만족합니다. 그들은 그것이 불필요하고 산만하다고 생각하고 Microsoft Edge의 베젤을 완전히 제거하도록 Microsoft에 요청하고 있습니다. 이는 "깨지지 않은 것은 고치지 말라"는 말과 비슷하지만 마이크로소프트는 이를 고려하지 않은 것 같다. 물론 내장된 광고 차단기, 추적 방지, 비밀번호 관리자 등 다양한 기능을 제공하는 인기 있는 웹 브라우저입니다. 그러나 일부 사용자는 브라우저의 웹 페이지 주위에 테두리가 있음을 알 수 있습니다. 이 테두리는 주의를 산만하게 하거나 보기 흉하게 만들 수 있으며 이를 제거하는 방법에는 여러 가지가 있습니다. r/Edge에 대한 긴 대화에서 내부가 아닌 일반 사용자 중 일부는 다음과 같은 사실을 발견했습니다.

Windows 12는 무료 업그레이드이며 구독이 필요하지 않습니다. Windows 12는 무료 업그레이드이며 구독이 필요하지 않습니다. Oct 21, 2023 am 11:17 AM

Microsoft는 Windows 12의 구독 기반 버전을 사용하지 않으며 요금이 부과되지 않습니다. 사람들은 여전히 ​​Windows 12가 구독 기반이라는 이야기를 하고 있습니다. 이는 Windows 11 미리 보기 빌드의 코드 문자열을 기반으로 한 소문입니다. 일부 사람들은 Microsoft가 어떻게 다음 버전의 Windows를 구독 모델로 만들 계획인지 여전히 궁금해하고 있습니다. 일부 언론에서 거론된 루머는 윈도우 vNext가 아닌 윈도우 11 기반 'IoT 엔터프라이즈 구독'이었던 것으로 밝혀졌다. 모르는 사람들을 위해 설명하자면 Windows24H2 또는 WindowsvNext는 Windows 12의 공개 이름입니다. 일부 언론이 승리할 것이다

Windows 10에서 Microsoft 계정에 로그인하는 방법 Windows 10에서 Microsoft 계정에 로그인하는 방법 Jan 01, 2024 pm 05:58 PM

win10 시스템에서는 마이크로소프트 계정으로 로그인이 가능하지만 아직 로그인 방법을 모르는 친구들이 많습니다. 오늘은 win10 마이크로소프트 계정으로 로그인하는 방법을 알려드리도록 하겠습니다. . win10 Microsoft 계정에 로그인하는 방법: 1. 왼쪽 하단에서 시작을 클릭하고 기어를 클릭하여 설정을 엽니다. 2. 그런 다음 "계정"을 찾아 클릭하여 엽니다. 3. 계정 입력 후 좌측의 '이메일 및 앱 계정'을 클릭하세요. 4. 그런 다음 오른쪽의 "계정 추가"를 클릭하세요. 5. 계정 인터페이스에 들어가면 첫 번째 "전망"을 클릭하면 많은 옵션이 나타납니다. 6. 나타나는 Microsoft 계정 창에 계정 번호를 입력하세요. 7. 모든 작업이 완료된 후

수정: 이 앱 패키지 설치는 지원되지 않습니다. 수정: 이 앱 패키지 설치는 지원되지 않습니다. Apr 13, 2023 am 11:43 AM

Microsoft는 UWP(Universal Windows Platform) 및 데스크톱 애플리케이션을 .msixbundles로 배포합니다. .Windows의 앱 및 AppxBundle 앱 패키지. Msixbundle, Appx 및 AppxPackage 설치 프로그램은 앱 패키지를 사이드로드하는 안정적인 방법이지만 여러 사용자는 그렇게 할 수 없습니다. "앱 패키지가 지원되지 않습니다" 오류가 나타나는 이유는 무엇입니까? 우리 독자 중 일부는 "해야합니다

Enterprise는 어떤 버전인가요? Enterprise는 어떤 버전인가요? Jan 12, 2021 am 10:55 AM

enterprise는 Windows 시스템의 Enterprise 버전입니다. Windows Enterprise 버전은 주로 대기업과 중소기업을 대상으로 하며 Direct Access, Windows To Go Creator, AppLokcer, BranchCache 등과 같은 다양한 실용적인 기능을 추가했습니다.

OneDrive에서 '현재 계정을 사용할 수 없습니다.' 오류 수정 OneDrive에서 '현재 계정을 사용할 수 없습니다.' 오류 수정 Sep 13, 2023 am 08:33 AM

Windows에서 로그인을 시도해도 작동하지 않습니다. 그러나 Microsoft 계정을 확인한 결과 아무런 문제가 없는 것으로 나타났습니다. Windows와 웹에서 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 기본 애플리케이션으로 만들 계획이라는 소식을 전해 드렸습니다. 최근 우리는 Redmond 기술 대기업이 최신 DevChannelInsider 버전에 소프트웨어를 추가할 것이라는 사실을 발견했습니다. Clipchamp에서 사용자는 백만 개 이상의 로열티 프리 동영상으로 가득 찬 스톡 라이브러리, 오디오 트랙, 동영상에 추가할 수 있는 이미지 등 더욱 독특한 제품을 찾을 수 있다고 합니다. 70개 이상의 언어로 음성 해설을 만들 수 있는 Azure 기반 텍스트 음성 변환 생성기도 있습니다. Clipchamp는 OneDrive와도 연결되므로 빠르고 안전하게

See all articles