在WCF服务中我一直是使用ADO.NET 实体模型来连接数据和操作数据库的,刚开始用时觉得比较新鲜,因为linq与sql语句的基本操作都有对应的使用方法,而且能直接获取到数据表的模型,大多情况下还是比较好用的。不过偶尔的时候要涉及到多表关联的复杂的sql语句的查询,写linq就比较麻烦了,要使用分步进行,就是先用linq查出一个条件,赋值给一个变量,然后再将这个变量作为下一个linq的查询条件,不大利于修改sql语句的变动。
因为本人是比较喜欢用sql语句的,即使是在使用linq时,也是现将sql语句写好,然后再转换的。所以我也会在项目中少量的使用Microsoft.Practices.EnterpriseLibrary进行连接,直接使用sql语句增删改查等。
Microsoft.Practices.EnterpriseLibrary生成的配置文件中的连接字符串格式和位置与ADO.NET 实体模型是一样的,所以也便于对配置文件的维护。下面看一下在WCF服务应用程序中如何使用。其实和前面写过的(http://blog.csdn.net/yysyangyangyangshan/article/details/8488791)用法是一样的,再次回顾一下吧。
首先Microsoft.Practices.EnterpriseLibrary的下载安装就不说了,直接搜索下载,新的旧的都可以,关键是在配置中把版本写对就可以了。
直接看web.config的配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!--添加配置企业库(1)-->
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings,
Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</configSections>
<!--添加配置企业库(2)-->
<dataConfiguration defaultDatabase="MyConnectionString"/>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="true"/>
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<connectionStrings>
<add name="MyConnectionString" connectionString="DATA SOURCE=数据库名;Persist Security Info=True;
User ID=用户名;Password=密码;Unicode=True" providerName="System.Data.OracleClient"/>
</connectionStrings>
</configuration>
其余用法都一样
执行的方法:
public class OracleSqlHelper
{
private static Database db = null;
public static DataSet GetDataTable(string commandText)
{
try
{
DataSet resultDataSet = null;
db = DatabaseFactory.CreateDatabase();//建立数据库连接
resultDataSet = db.ExecuteDataSet(CommandType.Text, commandText);//执行
return resultDataSet;
}
catch (Exception ex)
{
return null;
}
}
public static DataSet GetDataTableByProcedure(string commandText)
{
try
{
DataSet resultDataSet = null;
db = DatabaseFactory.CreateDatabase();//建立数据库连接
resultDataSet = db.ExecuteDataSet(CommandType.StoredProcedure, commandText);//执行存储过程
return resultDataSet;
}
catch (Exception e)
{
return null;
}
}
}
你的调用方法:
public class OracleDataProvider
{
public static DataTable TestReadTable(string id)
{
DataTable dataTable = null;
try
{
string commandText = "select tu.name from tabUser tu";
DataSet resultTable = OracleSqlHelper.GetDataTable(commandText);
int table = resultTable != null ? resultTable.Tables.Count : 0;
if (table > 0)
{
dataTable = resultTable.Tables[0];
}
}
catch (Exception e)
{
throw e;
}
return dataTable;
}
}
代码下载