c#中使用三层访问方法中如何连接数据库,与model(实体和数据库表映射类)怎么连接的?需要代码和解释。
有点理解了。看你的代码,是用的OleDb连接的数据库。我具体一点:三层模式下,连接数据库的这部分代码又该如何书写,写在什么地方?希望你能举一些例子,我想参考一下,非常感谢...
有点理解了。
看你的代码,是用的OleDb连接的数据库。我具体一点:三层模式下,连接数据库的这部分代码又该如何书写,写在什么地方?希望你能举一些例子,我想参考一下,非常感谢!
我现在在学做网站,所以问题太多了。
谢谢你的补充! 展开
看你的代码,是用的OleDb连接的数据库。我具体一点:三层模式下,连接数据库的这部分代码又该如何书写,写在什么地方?希望你能举一些例子,我想参考一下,非常感谢!
我现在在学做网站,所以问题太多了。
谢谢你的补充! 展开
展开全部
您好,
首先,我对于这个“三层访问方法”不是很理解……最近比较笨。
如果您说的是数据库软件的三层模型(表示层、业务逻辑层、数据访问层)的话,这个的确是涉及数据库软件很常见的架构,访问数据的工作完全由DAL也就是数据访问层来做。
至于您说的“实体和数据库表映射类”,我是不是可以理解为,用若干个类完全映射数据库中数据表的物理结构。
这个设计的想法很不错哦~很像MS的PetShop。
说了不少废话,其实应该是由DAL访问数据库并填充Model类的具体实例,然后返回这个实例由上层代码使用,我随便写了个代码,希望对您有帮助:
首先DAL.cs
using System;
using System.Data;
using System.Data.OleDb;
class DAL{
public Employee GetFirstEmployee()
{
OleDbConnection......
....
此处省略一些代码,包括SQL语句
}
}
这个DAL返回一个Employee类型的实例,里面保存了数据库中Employee表中第一个雇员的信息。
Model中Employee类
class Employee
{
int age;
string name;
.....
}
然后上层使用的时候,直接调用DAL.GetFirstEmployee()方法得到第一个雇员的信息。
我可能解释的不是很清楚,而且这也不是最好的设计,比如DAL一般要涉及到工厂模式,如果您仍有疑问,希望您补充问题。
============================================
对补充的答复:
其实大一些的软件大多会涉及到设计模式这种东西~~
软件设计是跟着前面的需求分析来做的,所以数据访问层可能会有些不同.但这个层应该是属于相对稳定的模块.
根据软件设计的原理,要尽量保持模块间的独立性.因此,数据访问层中应该尽量只包括访问数据库的代码.
上面的代码比较简单,下面写个稍复杂点的:)
此DAL可以用来连接Oracle\Access\SQL Server数据库.分为5个类...
sealed class DalFactory{
public static DAL CreateDal()
{
//Here read the configuration file
//and return the certain child class of DAL
//for example...
//假设这里读取到的配置是SQL数据库
return new SqlServerDal();
}
}
//基类DAL
public abstract class DAL
{
public abstract Employee GetFirstEmployee();
...
}
//我只写了一个方法返回第一个雇员信息
//SQL Server 实现类SqlServerDal
public class SqlServerDal : DAL
{
public Employee GetFirstEmployee()
{
//sql 连接数据库
}
}
//OLE实现类 OleDbDal
public class OleDbDal : DAL
{
public Employee GetFirstEmployee()
{
//OLE 连接数据库
}
}
//ODBC实现类 OdbcDbDal
public class OdbcDbDal : DAL
{
public Employee GetFirstEmployee()
{
//OLE 连接数据库
}
}
大概就是这个样子,这只是一个想法,我以前写过个类似的程序,就是这个架构。
继承和多态是OOA/OOD/OOP最有力的东西,比如这里,把DAL的子类当作DAL返回,上层BLL代码就无需关心下面是什么DBMS。
SQL语句我倾向于单独放到某个类里做成Public Const变量(如果经常变化的话),或者放到Model类里。
OOA的核心思想就是“发现并封装变化点”。
具体的代码我没有写,那个太多了,如果您需要,可以继续补充问题~~呵呵
首先,我对于这个“三层访问方法”不是很理解……最近比较笨。
如果您说的是数据库软件的三层模型(表示层、业务逻辑层、数据访问层)的话,这个的确是涉及数据库软件很常见的架构,访问数据的工作完全由DAL也就是数据访问层来做。
至于您说的“实体和数据库表映射类”,我是不是可以理解为,用若干个类完全映射数据库中数据表的物理结构。
这个设计的想法很不错哦~很像MS的PetShop。
说了不少废话,其实应该是由DAL访问数据库并填充Model类的具体实例,然后返回这个实例由上层代码使用,我随便写了个代码,希望对您有帮助:
首先DAL.cs
using System;
using System.Data;
using System.Data.OleDb;
class DAL{
public Employee GetFirstEmployee()
{
OleDbConnection......
....
此处省略一些代码,包括SQL语句
}
}
这个DAL返回一个Employee类型的实例,里面保存了数据库中Employee表中第一个雇员的信息。
Model中Employee类
class Employee
{
int age;
string name;
.....
}
然后上层使用的时候,直接调用DAL.GetFirstEmployee()方法得到第一个雇员的信息。
我可能解释的不是很清楚,而且这也不是最好的设计,比如DAL一般要涉及到工厂模式,如果您仍有疑问,希望您补充问题。
============================================
对补充的答复:
其实大一些的软件大多会涉及到设计模式这种东西~~
软件设计是跟着前面的需求分析来做的,所以数据访问层可能会有些不同.但这个层应该是属于相对稳定的模块.
根据软件设计的原理,要尽量保持模块间的独立性.因此,数据访问层中应该尽量只包括访问数据库的代码.
上面的代码比较简单,下面写个稍复杂点的:)
此DAL可以用来连接Oracle\Access\SQL Server数据库.分为5个类...
sealed class DalFactory{
public static DAL CreateDal()
{
//Here read the configuration file
//and return the certain child class of DAL
//for example...
//假设这里读取到的配置是SQL数据库
return new SqlServerDal();
}
}
//基类DAL
public abstract class DAL
{
public abstract Employee GetFirstEmployee();
...
}
//我只写了一个方法返回第一个雇员信息
//SQL Server 实现类SqlServerDal
public class SqlServerDal : DAL
{
public Employee GetFirstEmployee()
{
//sql 连接数据库
}
}
//OLE实现类 OleDbDal
public class OleDbDal : DAL
{
public Employee GetFirstEmployee()
{
//OLE 连接数据库
}
}
//ODBC实现类 OdbcDbDal
public class OdbcDbDal : DAL
{
public Employee GetFirstEmployee()
{
//OLE 连接数据库
}
}
大概就是这个样子,这只是一个想法,我以前写过个类似的程序,就是这个架构。
继承和多态是OOA/OOD/OOP最有力的东西,比如这里,把DAL的子类当作DAL返回,上层BLL代码就无需关心下面是什么DBMS。
SQL语句我倾向于单独放到某个类里做成Public Const变量(如果经常变化的话),或者放到Model类里。
OOA的核心思想就是“发现并封装变化点”。
具体的代码我没有写,那个太多了,如果您需要,可以继续补充问题~~呵呵
展开全部
Model层其实是数据表的一个印射....
补充:
界面层:
private void button1_Click(object sender, EventArgs e)
{
this.textbox2.text = BLL.GetDataSet(this.textbox1.text);
}
BLL层(业务逻辑层)
public static string GetDataSet(string name)
{
省略一些业务逻辑代码
return DAL.GetDataSet(name);
}
DAL层(数据访问层)
public static string GetDataSet(string name)
{
此处省略一些代码,包括SQL语句
return string类型;
}
补充:
界面层:
private void button1_Click(object sender, EventArgs e)
{
this.textbox2.text = BLL.GetDataSet(this.textbox1.text);
}
BLL层(业务逻辑层)
public static string GetDataSet(string name)
{
省略一些业务逻辑代码
return DAL.GetDataSet(name);
}
DAL层(数据访问层)
public static string GetDataSet(string name)
{
此处省略一些代码,包括SQL语句
return string类型;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询