简单的数据工厂问题,顶者有分,

ice2927276 2006-09-22 08:53:08
小弟初学分层,照着例子做个留言本,实现显示和发送留言功能。本来分层做好没有问题,能显示和发送留,但是在加入数据访问层工厂后,就出现了问题:编译器错误信息: CS0117: “TraceILWordDbTask.ILWordTask”并不包含“ListLWord”的定义。
下面偶把各层的文件代码列出来,大伙儿帮偶看看是哪里有问题啊!
UI层后台程序ListLword.asp.cs文件:
using TraceLWordInterService; //引用业务层

public partial class ListLWord : System.Web.UI.Page
{
/// <summary>
/// 页面初始化函数
/// </summary>
private void Page_Load(object sender, EventArgs e)
{
LWord_DataBind();
}
/// <summary>
/// 留言列表邦定函数
/// </summary>
private void LWord_DataBind()
{
DataSet ds = new DataSet();
LWordService lws = new LWordService();
lws.ListLWord(ds, @"LWordTable");

m_lwordListCtrl.DataSource = ds.Tables[@"LWordTable"].DefaultView;
m_lwordListCtrl.DataBind();
}
/// <summary>
/// 发送留言函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void m_btnPost_Click(object sender, EventArgs e)
{
string userID = this.postID.Text;
string textContent = this.postText.Value;

LWordService lws = new LWordService();
lws.PostLword(userID, textContent);

// 跳转到留言显示页面
Response.Redirect("ListLWord.aspx", true);
}
}

业务层LWordService.cs文件:
using TraceDALFactory; //引用数据工厂
using TraceILWordDbTask; //引用数据接口

namespace TraceLWordInterService
{
/// <summary>
/// LWordService 中间服务类业务处理
/// </summary>
public class LWordService
{
public LWordService()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 读取数据库表 LWord,并填充 DataSet 数据集
/// </summary>
/// <param name="ds">填充目标数据集</param>
/// <param name="tableName">表名称</param>
/// <returns>记录行数</returns>
public int ListLWord(DataSet ds, string tableName)
{
//SqlServerTask lst = new SqlServerTask();
//LWordTask lwt = new LWordTask();
//return lst.ListLWord(ds, tableName);
return (new DbTaskDriver()).DbLWordDriver().ListLWord(ds, tableName);
}
///<summary>
///发送留言
///<summary>
///<param name="textContent">留言内容</param>
public void PostLword(string userID,string textContent)
{
//SqlServerTask lst = new SqlServerTask();
//LWordTask lwt= new LWordTask();
//lst.PostLWord(userID,textContent);
return (new DbTaskDriver()).DbLWordDriver().PostLWord(userID, textContent);
}

}
}

数据访问层工厂类DbTaskDriver.cs文件:
using System.Reflection;// 需要使用 .NET 反射
using TraceILWordDbTask;// 引用数据接口

namespace TraceDALFactory
{
/// <summary>
/// DbTaskDriver 数据库访问层工厂
/// </summary>
public class DbTaskDriver
{
public DbTaskDriver()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 数据工厂动态生成数据库访问对象
/// </summary>
/// <returns></returns>
public ILWordTask DbLWordDriver()
{
string assemblyName = ConfigurationSettings.AppSettings["AssemblyName"];
string constructor = ConfigurationSettings.AppSettings["Constructor"];
return (ILWordTask)Assembly.Load(assemblyName).CreateInstance(constructor, false);
}
}
}

web.config文件:
<configuration>
<connectionStrings/>
<appSettings>
<!--sql连接字符串中不可以出现"&","<",">"如果一定要用请分别用"&","<",">"替换-->
<add key="AssemblyName" value="TraceSqlServerTask" />
<add key="Constructor" value="TraceSqlServerTask.SqlServerTask" />
</appSettings>
</configuration>
...全文
245 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ice2927276 2006-09-22
  • 打赏
  • 举报
回复

楼上的先谢谢你,
但是接口不用类名吗,那放问acc和sql数据库的文件怎么继承呢?
sekone 2006-09-22
  • 打赏
  • 举报
回复

//“TraceILWordDbTask.ILWordTask”并不包含“ListLWord”的定义。
===================
我看出来了

你下面这段中 ILWordTask确实没有“ListLWord”的定义
而是 DbILWordTasK中才有“ListLWord”的定义

namespace TraceILWordDbTask
{
/// <summary>
/// ILWordTask 留言板数据库任务接口
/// </summary>
public class ILWordTask
{
public ILWordTask()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public interface DbILWordTasK
{
int ListLWord(DataSet ds,string tableName);
void PostLWord(string userID,string textContext);
}
}
}



===============================
你的数据访问层接口ILWordTask.cs文件应该改成这样:

namespace TraceILWordDbTask
{
/// <summary>
/// ILWordTask 留言板数据库任务接口
/// </summary>
public interface ILWordTask
{
int ListLWord(DataSet ds,string tableName);
void PostLWord(string userID,string textContext);
}
}
ice2927276 2006-09-22
  • 打赏
  • 举报
回复
出错信息和我文件我都分别贴出来了,在上面,
ice2927276 2006-09-22
  • 打赏
  • 举报
回复
我的数据访问层接口ILWordTask.cs文件如下,是有ListLWord这个方法的啊:
namespace TraceILWordDbTask
{
/// <summary>
/// ILWordTask 留言板数据库任务接口
/// </summary>
public class ILWordTask
{
public ILWordTask()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public interface DbILWordTasK
{
int ListLWord(DataSet ds,string tableName);
void PostLWord(string userID,string textContext);
}
}
}
sun2828 2006-09-22
  • 打赏
  • 举报
回复
up
fds2003 2006-09-22
  • 打赏
  • 举报
回复
把出错的地方贴出来,不要贴一大段代码!!
股神 2006-09-22
  • 打赏
  • 举报
回复
up
ghx88 2006-09-22
  • 打赏
  • 举报
回复
public int ListLWord(DataSet ds, string tableName)
{
ILWordTask dal = (new TraceDALFactory.DbTaskDriver()).DbLWordDriver();
return dal.ListLWord(ds, tableName);
}

或从头到尾先编译一次
myminimouse 2006-09-22
  • 打赏
  • 举报
回复
你的SqlServerTask类是实现接口ILWordTask,ILWordTask里并没有ListLWord这个方法,但是你类里却实现了
ice2927276 2006-09-22
  • 打赏
  • 举报
回复
感觉应该就是业务层文件LWordService.cs调用不到数据库访问文件的ListLWord函数.
myminimouse 2006-09-22
  • 打赏
  • 举报
回复
提示不是很清楚吗?
shixin1198 2006-09-22
  • 打赏
  • 举报
回复
我也接下分
forideal 2006-09-22
  • 打赏
  • 举报
回复
是不是接口中没有实现“ListLWord”的方法定义?
ice2927276 2006-09-22
  • 打赏
  • 举报
回复
偶是楼主,出错的源信息:

编译器错误信息: CS0117: “TraceILWordDbTask.ILWordTask”并不包含“ListLWord”的定义

源错误:



行 36: //LWordTask lwt = new LWordTask();
行 37: //return lst.ListLWord(ds, tableName);
行 38: return (new DbTaskDriver()).DbLWordDriver().ListLWord(ds, tableName);
行 39: }
行 40: ///<summary>


源文件: f:\test\TraceLWord\App_Code\LWordService.cs 行: 38
tt5201 2006-09-22
  • 打赏
  • 举报
回复
太长了。接点分吧
ustbwuyi 2006-09-22
  • 打赏
  • 举报
回复
把抱错的地方说一下...
public partial class ListLWord

把ListWord设为静态方法试试
ustbwuyi 2006-09-22
  • 打赏
  • 举报
回复
慢慢看...
ice2927276 2006-09-22
  • 打赏
  • 举报
回复

数据访问层接口ILWordTask.cs文件:
namespace TraceILWordDbTask
{
/// <summary>
/// ILWordTask 留言板数据库任务接口
/// </summary>
public class ILWordTask
{
public ILWordTask()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public interface DbILWordTasK
{
int ListLWord(DataSet ds,string tableName);
void PostLWord(string userID,string textContext);
}
}
}

数据访问层access数据库访问文件MdbTask.cs:
using System.Data.OleDb;//引access数据访问
using TraceILWordDbTask;// 引用数据访问层接口

namespace TraceMdbTask
{
/// <summary>
/// 数据库任务类
/// </summary>
public class MdbTask : ILWordTask // 实现了ILWordTask接口
{
public MdbTask()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// 数据库链接字符串
private const string mdbstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:/test/TraceLWord/data/TraceLWordDb.mdb";

/// <summary>
/// 读取数据库表 LWord,并填充 DataSet 数据集
/// </summary>
/// <param name="ds">填充目标数据集</param>
/// <param name="tableName">表名称</param>
/// <returns>记录行数</returns>
public int ListLWord(DataSet ds,string tableName)
{
//ArrayList lwordlist = new ArrayList();

string cmdtext = "select * from [LWord] order by [PostTime] desc";
OleDbConnection dbconn = new OleDbConnection(mdbstr);
OleDbDataAdapter dbadp = new OleDbDataAdapter(cmdtext, dbconn);
int count = dbadp.Fill(ds,tableName);
return count;
}
///<summary>
///发送留言
///<summary>
///<param name="textContent">留言内容</param>
public void PostLWord(string userID,string textContent)
{
if (textContent == "" || textContent == null)
throw new Exception("留言内容不能为空");

string cmdtext = "Insert Into LWord(UserID,TextContent) Values(@UserID,@TextContent)";
OleDbConnection dbconn = new OleDbConnection(mdbstr);
OleDbCommand dbcomm = new OleDbCommand(cmdtext, dbconn);
///设置留内容
dbcomm.Parameters.Add("@UserID", OleDbType.Char);
dbcomm.Parameters["@UserID"].Value = userID;
dbcomm.Parameters.Add("@TextContent", OleDbType.LongVarChar);
dbcomm.Parameters["@TextContent"].Value = textContent;
///执行SQL语句
try
{
dbconn.Open();
dbcomm.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
dbconn.Close();
}
}

}
}
数据访问层sql server数据库访问文件SqlServerTask.cs:
using System.Data.SqlClient;//引用sqlserver访问
using TraceILWordDbTask;// 引用数据接口

namespace TraceSqlServerTask
{
/// <summary>
/// SqlServerTask 留言板任务类
/// </summary>
public class SqlServerTask : ILWordTask // 实现了ILWordTask接口
{
public SqlServerTask()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//设置数据库链接字符串
private string sqlstr = "Server=127.0.0.1;Database=TraceLWordDb;uid=sa;pwd=***";
/// <summary>
/// 读取数据库表 LWord,并填充 DataSet 数据集
/// </summary>
/// <param name="ds">填充目标数据集</param>
/// <param name="tableName">表名称</param>
/// <returns></returns>
public int ListLWord(DataSet ds, string tableName)
{
string cmdtext = "select * from [LWord] order by [PostTime] desc";
SqlConnection dbconn = new SqlConnection(sqlstr);
SqlDataAdapter dbadp = new SqlDataAdapter(cmdtext,dbconn);
int count = dbadp.Fill(ds,tableName);
return count;
}

public void PostLWord(string userID,string textContext)
{
if (textContext == "" || textContext == null)
throw new Exception("留言内容不能空!");
string cmdtext = "insert into [LWord](UserID,TextContent) values(@userID,@textContent)";
SqlConnection dbconn=new SqlConnection(sqlstr);
SqlCommand dbcomm = new SqlCommand(cmdtext,dbconn);
//设置留言参数
dbcomm.Parameters.Add("@userID", SqlDbType.Char);
dbcomm.Parameters["@userID"].Value = userID;
dbcomm.Parameters.Add("@textContent", SqlDbType.NVarChar);
dbcomm.Parameters["@textContent"].Value = textContext;
//执行SQL语句
try
{
dbconn.Open();
dbcomm.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
dbconn.Close();
}
}
}
}
不知道我说清楚没,代码有点多,大家赖心帮我看一下。
sekone 2006-09-22
  • 打赏
  • 举报
回复
但是接口不用类名吗,那放问acc和sql数据库的文件怎么继承呢?
===============
接口不是类,不用类名,
放问acc和sql数据库的继承该接口不是继承该类

namespace TraceSqlServerTask
{
/// <summary>
/// SqlServerTask 留言板任务类
/// </summary>
public class SqlServerTask : ILWordTask // 实现了ILWordTask接口

你的数据访问层这样继承就没错,接口层按我说的那样就正确

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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