仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 617|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网页设计DAM 复杂跨数据库ADO.NET组件

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:19:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
说句实话,Java跨平台根本就不是外行人想想的那种,一次编译,处处运行。它的特性:

在您包管SQL语句兼容的条件下,透过它来会见数据库时,在不必要改动DAL层一点代码的条件下,只需修正一下设置文件,它即可觉得你跨分歧范例的数据库。
让你的DAL层代码更见简洁。它会依据设置文件设置的毗连信息,主动为你创立数据库毗连,实行操纵。封闭毗连,开释毗连等.
让DAL层的分歧模块会见分歧范例或分歧数据库加倍便利。
不错的实行效力,它基于原生ADO.NET。只会反射一次会见分歧数据库的ADO供应者的程序集(DAM终极都是经由过程这些供应者来完成会见分歧范例数据库的)。
它的设置:
复制代码代码以下:
<appsettings>
<addkey="rpsconnection"value="mssql"/>
<addkey="damconnection"value="sqlite"/>
</appsettings>
<connectionstrings>
<addname="sqlite"connectionString=""providerName="System.Data.SQLite.SQLiteConnection;System.Data.SQLite"/>
<addname="mssql"connectionString=""providerName="System.Data.SqlClient.SqlConnection;System.Data"/>
</connectionstrings>

appsettings
1.增加一个KV。KEY="damconnection"VALUE="上面connectionstrings中的一个name的一项"."damconnection"为默许的DAM读取的KEY,KEY的名字请不要改换.VALUE的值能够依据您默许毗连的数据库毗连变而变.
2.假如想使用多个数据库毗连,来会见分歧的数据库.您能够在appsettings中增加其余KV项.代码里利用DAM中Config大概Factroy来创立分歧的数据库毗连,能够完成会见分歧的或分歧范例的数据库.
connectionstrings
1.项中connectionString值不必要变
2.项中providerName值分为三个部分

毗连的完全类名;毗连类地点的程序集名
(定名空间+类名)(两头用";"分隔)(注重不加.dll)

测试代码:
DAL层测试代码
复制代码代码以下:
///<summary>
///数据会见层
///透过Dam会见数据库
///</summary>
publicclassDALTest
{
///<summary>
///最复杂的拔出操纵
///Execute会帮你主动创立所对应数据库的毗连、实行操纵、开释Command、封闭毗连、开释链接等
///</summary>
///<returns>实行后受影响行数</returns>
publicintInsert()
{
returnExecute.SExecuteNonQuery("sp_name",null);
//returnExecute.SExecuteNonQuery("insertintotablename(..)values(..)",CommandType.Text,null);
}
///<summary>
///带参数的拔出操纵
///Execute会帮你主动创立所对应数据库的毗连
///并帮你把参数范例转换为所对应数据库范例的参数举行数据库操纵.
///</summary>
///<returns></returns>
publicintInsert_Paras()
{
DbParameter[]paras=
{
newMySqlParameter("p1","p1value")
,newSqlParameter("p2","p2value")
};
returnExecute.SExecuteNonQuery("sp_name",paras);
}
///<summary>
///带参数的拔出操纵,并能失掉参数前往值
///Execute会帮你主动创立所对应数据库的毗连
///并帮你把参数范例转换为所对应数据库范例的参数举行数据库操纵.
///实行完成您可失掉前往值
///</summary>
///<returns></returns>
publicintInsert_Paras(refstringoutputValue)
{
intresultInt=0;
DbParameter[]paras=
{
newMySqlParameter("p1","p1value")
,newSqlParameter("p2_output","")
{
Direction=ParameterDirection.Output
}
};
resultInt=Execute.SExecuteNonQuery("sp_name",paras);
if(paras[1].Value!=null)outputValue=paras[1].Value.ToString();
returnresultInt;
}
///<summary>
///带参数的拔出操纵,并能失掉参数前往值,此参数从BLL层传来
///同上...
///</summary>
///<returns></returns>
publicintInsert_Paras(DbParameter[]paras)
{
returnExecute.SExecuteNonQuery("sp_name",paras);
//如许能够在BLL层经由过程paras[1]来猎取前往参数了
}
///<summary>
///实行同毗连多操纵的事件处置
///这里利用1个带参数的存储历程和一个不带参数的sql语句操纵
///利用是静态挪用办法
///</summary>
///<returns></returns>
publicboolInsert_Transaction()
{
boolresultBool=false;
DbParameter[]paras=
{
newMySqlParameter("p1","p1value")
,newSqlParameter("p2","p2value")
};
DbConnectionconnection=null;
DbTransactiontransaction=null;
try
{
connection=Factory.CreateConnection();
connection.Open();
transaction=connection.BeginTransaction();
intresultInt1=Execute.SExecuteNonQuery(connection,transaction,"sp_name1",paras);
intresultInt2=Execute.SExecuteNonQuery(connection,transaction,"insertintotablename(...)values(...)",null);
if(resultInt1>0&&resultInt2>0)
{
transaction.Commit();
resultBool=true;
}
else
{
transaction.Rollback();
}
}
catch(Exception)
{
if(transaction!=null)
{
transaction.Rollback();
}
}
finally
{
if(transaction!=null)
{
transaction.Dispose();
}
if(connection!=null)
{
//这里必要手动封闭毗连!!
connection.Close();
connection.Dispose();
}
}
returnresultBool;
}
///<summary>
///实行同毗连多义务操纵(不利用事件)
///这里我们利用工具办法。如许实行多义务操纵大概会不乱点和效力高点
///</summary>
///<returns></returns>
publicvoidInsert_much()
{
Executeexec=Execute.NewExecute;
DbConnectionconnection=null;
try
{
connection=Factory.CreateConnection();
exec.ExecuteNonQuery(connection,null,"sp_name",null);
exec.ExecuteNonQuery(connection,null,"sp_name2",null);
}
finally
{
if(connection!=null)
{
//由于挪用了带事件的谁人办法(可是我们设置事件为NULL,事件有效)
//以是毗连不会主动封闭开释,我们必要手动开释
connection.Close();
connection.Dispose();
}
}
}
}

Dam:Dam.rar
有乐趣的能够看看:)外部有匡助文档。它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。
金色的骷髅 该用户已被删除
沙发
发表于 2015-1-19 08:43:34 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
简单生活 该用户已被删除
板凳
发表于 2015-1-25 21:52:48 | 只看该作者
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
谁可相欹 该用户已被删除
地板
发表于 2015-2-4 06:33:09 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
若天明 该用户已被删除
5#
发表于 2015-2-9 17:46:13 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
透明 该用户已被删除
6#
发表于 2015-2-27 14:24:47 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
再见西城 该用户已被删除
7#
发表于 2015-3-9 07:58:14 | 只看该作者
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
莫相离 该用户已被删除
8#
发表于 2015-3-16 21:23:58 | 只看该作者
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-23 03:48:31 | 只看该作者
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-16 10:01

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表