|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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语言。 |
|