如何将数据访问层包装成Webservice,可以支持直接访问数据库或调用Webservice远程访问

buduanxuexi 2008-09-02 10:56:34
BLL层,供界面层访问:
using System;
using System.Collections.Generic;

using Dtsc.Common.Utility;

namespace MyFrame.DataAcess.Data
{
/// <summary>
/// Basdatacategory业务逻辑
/// </summary>
public class BllBasdatacategory
{
private static readonly IBaseOperate< Basdatacategory> baseOperate =(IBaseOperate< Basdatacategory>) DALFactory.CreateInstance("DalBasdatacategory");

private static readonly IBasdatacategory dal = (IBasdatacategory)DALFactory.CreateInstance("DalBasdatacategory");
#region BaseOperation

/// <summary>
/// 增加一条记录
/// </summary>
/// <param name="model"></param>
public static void Insert(Basdatacategory model)
{
if(model != null)
baseOperate.Insert(model);
}

/// <summary>
/// 删除一条记录
/// </summary>
/// <param name="id"></param>
public static void Delete(Basdatacategory model)
{
if(model != null)
baseOperate.Delete(model);
}

/// <summary>
/// 更新一条记录
/// </summary>
/// <param name="model"></param>
public static void Update(Basdatacategory model)
{
if(model != null)
baseOperate.Update(model);
}

/// <summary>
/// 获取一条记录
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static Basdatacategory GetModel(string id)
{
if(string.IsNullOrEmpty(id))
{
return null;
}
return baseOperate.GetModel(id);
}

/// <summary>
/// 获取所有记录
/// </summary>
/// <returns></returns>
public static IList<Basdatacategory> GetList()
{
return baseOperate.GetList();
}

/// <summary>
/// 查询某条记录是否存在
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static bool Exists(string id)
{
if(string.IsNullOrEmpty(id))
{
return true;
}
return baseOperate.Exists(id);
}

#endregion

#region UserOperation

/// <summary>
/// 判断分类编码和名称是否存在
/// </summary>
/// <param name="model"></param>
/// <param name="type"></param>
/// <returns></returns>
public static bool ExistsCategory(Basdatacategory model, MyFrame.Common.EnumLibrary.FormOp type)
{
return dal.ExistsCategory(model, type);
}
#endregion
}
}

接口:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace MyFrame.DataAcess.Data
{
public interface IBasdatacategory:IBase
{
bool ExistsCategory(Basdatacategory model, MyFrame.Common.EnumLibrary.FormOp type);
}
}

工厂:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using Dtsc.Common.Utility;

namespace MyFrame.DataAcess.Data
{
/// <summary>
/// 数据访问工厂
/// </summary>
public class DALFactory
{

private static readonly string path = "MyFrame.DataAcess";

private static readonly string dbType = WebConfigHelper.GetAppSetting("DataBaseType");

/// <summary>
/// 创建数据访问实体
/// </summary>
/// <param name="className">类名</param>
/// <returns></returns>
public static object CreateInstance(string className)
{
return Assembly.Load(path).CreateInstance(string.Format("{0}.Data.{1}.{2}", path, dbType, className));
}
}
}

...全文
228 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaoyue_20081224 2008-09-07
  • 打赏
  • 举报
回复
C#刚刚学习,学会告诉你。。哈哈。。。
zhujiechang 2008-09-07
  • 打赏
  • 举报
回复
WCF全部都支持
Magicwords 2008-09-04
  • 打赏
  • 举报
回复
看到那么多代码就晕倒了

如果要返回自已的类型,就要自已写序列化的程 序,有那么点复杂
yyunffu 2008-09-04
  • 打赏
  • 举报
回复
实际上,webservice不过就是一种通用性比较好的数据传输方式,你如果希望传输数据,接口里面取数据返回就可以了。

这个难度并不是很大。
蒋晟 2008-09-03
  • 打赏
  • 举报
回复
SQL Server支持SOAP的,不过最新的版本里面被砍掉了,因为没什么人把业务逻辑放数据库,都是放数据访问层之上。
你的WebService里面放不放业务逻辑?怎么保证安全性?
buduanxuexi 2008-09-02
  • 打赏
  • 举报
回复
主要是BllBasdatacategory 这层,
我在改造的时候遇到两个问题:
1.实体类在客户端和Webservice都是同一个组件,为什么返回的实体类实体不匹配?
2 如何返回ILIST集合

请大家指教
buduanxuexi 2008-09-02
  • 打赏
  • 举报
回复
Oracle:

using System;
using System.Text;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.OracleClient;

using Dtsc.Common.Utility;

namespace MyFrame.DataAcess.Data.Oracle
{
/// <summary>
/// Basdatacategory
/// </summary>
public class DalBasdatacategory : Dtsc.Common.Utility.IBaseOperate<Basdatacategory>, IBasdatacategory
{
#region BaseOperation

/// <summary>
/// 新增一条记录
/// </summary>
/// <param name="model">实体模型</param>
/// <returns>影响行数</returns>
public int Insert(Basdatacategory model)
{
return Insert(model,null);
}
/// <summary>
/// 新增一条记录
/// </summary>
/// <param name="model">实体模型</param>
/// <param name="trans">事务</param>
/// <returns>影响行数</returns>
public int Insert(Basdatacategory model,OracleTransaction trans)
{
string sql = "INSERT INTO BasDataCategory (DataCategoryID,ParentID,DataCategoryName,DataCategoryCode,ShortName,IsSystem,IsValid,Remark) VALUES (@DataCategoryID,@ParentID,@DataCategoryName,@DataCategoryCode,@ShortName,@IsSystem,@IsValid,@Remark)";

OracleParameter[] parms = {
new OracleParameter("@DataCategoryID", OracleType.VarChar, 36),
new OracleParameter("@ParentID", OracleType.VarChar, 36),
new OracleParameter("@DataCategoryName", OracleType.VarChar, 100),
new OracleParameter("@DataCategoryCode", OracleType.VarChar, 50),
new OracleParameter("@ShortName", OracleType.VarChar, 50),
new OracleParameter("@IsSystem", OracleType.Number, 1),
new OracleParameter("@IsValid", OracleType.Number, 1),
new OracleParameter("@Remark", OracleType.VarChar, 300)
};
parms[0].Value = model.Datacategoryid;
if(model.Parentid == null)
parms[1].Value = DBNull.Value;
else
parms[1].Value = model.Parentid;
parms[2].Value = model.Datacategoryname;
if(model.Datacategorycode == null)
parms[3].Value = DBNull.Value;
else
parms[3].Value = model.Datacategorycode;
if(model.Shortname == null)
parms[4].Value = DBNull.Value;
else
parms[4].Value = model.Shortname;
parms[5].Value = model.Issystem;
parms[6].Value = model.Isvalid;
if(model.Remark == null)
parms[7].Value = DBNull.Value;
else
parms[7].Value = model.Remark;
if(trans == null)
return OracleHelper.ExecuteNonQuery(sql, parms);
else
return OracleHelper.ExecuteNonQuery(trans, CommandType.Text, sql, parms);
}
/// <summary>
/// 更新一条记录
/// </summary>
/// <param name="model">实体模型</param>
/// <returns>影响行数</returns>
public int Update(Basdatacategory model)
{
return Update(model,null);
}

#endregion
}
}


buduanxuexi 2008-09-02
  • 打赏
  • 举报
回复
数据访问层:
SQL:

using System;
using System.Text;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;

using Dtsc.Common.Utility;

namespace MyFrame.DataAcess.Data.SQLServer
{
/// <summary>
/// Basdatacategory
/// </summary>
public class DalBasdatacategory : Dtsc.Common.Utility.IBaseOperate<Basdatacategory>, IBasdatacategory
{
#region BaseOperation

/// <summary>
/// 新增一条记录
/// </summary>
/// <param name="model">实体模型</param>
/// <returns>影响行数</returns>
public int Insert(Basdatacategory model)
{
string sql = "INSERT INTO BasDataCategory (DataCategoryID,ParentID,DataCategoryName,DataCategoryCode,ShortName,IsSystem,IsValid,Remark) VALUES (@DataCategoryID,@ParentID,@DataCategoryName,@DataCategoryCode,@ShortName,@IsSystem,@IsValid,@Remark)";

SqlParameter[] parms = {
new SqlParameter("@DataCategoryID", SqlDbType.UniqueIdentifier, 16),
new SqlParameter("@ParentID", SqlDbType.UniqueIdentifier, 16),
new SqlParameter("@DataCategoryName", SqlDbType.VarChar, 100),
new SqlParameter("@DataCategoryCode", SqlDbType.VarChar, 50),
new SqlParameter("@ShortName", SqlDbType.VarChar, 50),
new SqlParameter("@IsSystem", SqlDbType.Bit, 1),
new SqlParameter("@IsValid", SqlDbType.Bit, 1),
new SqlParameter("@Remark", SqlDbType.VarChar, 300)
};
parms[0].Value = model.Datacategoryid;
if(model.Parentid == null)
parms[1].Value = DBNull.Value;
else
parms[1].Value = model.Parentid;
parms[2].Value = model.Datacategoryname;
if(model.Datacategorycode == null)
parms[3].Value = DBNull.Value;
else
parms[3].Value = model.Datacategorycode;
if(model.Shortname == null)
parms[4].Value = DBNull.Value;
else
parms[4].Value = model.Shortname;
parms[5].Value = model.Issystem;
parms[6].Value = model.Isvalid;
if(model.Remark == null)
parms[7].Value = DBNull.Value;
else
parms[7].Value = model.Remark;

return SqlHelper.ExecuteNonQuery(sql, parms);
}


#endregion
}
}

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧