我做登陆界面,但是只会做一层,现在要做三层结构,求解。 本帖最后由 u014197691 于 2014-07-24 12:25:36 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.cnblogs.com/qinying/archive/2009/04/16/1436444.html 我看你这里面的贴,出现,怎么改还是先理解三层架构之间数据是怎么传递的吧。没有引用dll 你这差的多了程序根本没有那么多层,你硬去调用,能引用到才怪而且不要把网上随便找到的webform代码贴到你winform程序里去 感觉你是没有弄清楚三层构架的含义:页面层、业务层(业务逻辑)、数据层 比如你现在的:数据层,与你的数据库相关联的的,比如你的数据库连接,sql语句。业务层:就是与数据层有关联在一起,逻辑推理上的关系,比如,这边要传一些数据给数据层,你的用户名和你的密码之类的页面层:就是你的操作,传数据给业务层,业务层逻辑判断等等。 新建一个项目,起名为DAL(数据层),类型为类库以下代码放在DAL层中的某个方法中 SqlConnection conn = new SqlConnection(@"Data Source=IDEA-PC;Initial Catalog=图书馆管理系统;Integrated Security=True"); conn.Open(); String sql = string.Format("select 编号 from 管理员表 where 姓名='{0}'", strSql); SqlCommand cmd = new SqlCommand(sql, conn);然后再建一个类库项目,起名为BLL(业务逻辑层)BLL层引用DAL层在BLL层中加入你的业务逻辑,这里没什么逻辑,直接调用DAL层的查询方法就可以最后在表现层,也就是你的UI层中引用DAL层和BLL层项目然后调用BLL层的方法,向BLL传递参数即可 把缺少的动态链接库加上,用mvc的话,装下mvc3或者4 网上可以找到很多软件自动生成三层代码但是你明白三层的关系么 如果你明白了 再生成会更快注意bin文件夹添加引用就可以了,适应到三层的方法有提示错误的话 就解析一下就好 其实就是using 1.表现层:就是你的界面;2.逻辑层,就是处理登陆逻辑的地方;3.数据访问层,就是查询和持久化数据的地方。简单说就是数据库操作的地方。代码访问的层次:窗体--〉逻辑层--〉数据库访问层。表现层和逻辑层交互的地方:就是你窗体那个点击方法 private void button1_Click(object sender, EventArgs e) { //实例化逻辑层的类,假设为A类。 //执行逻辑层方法,比如说CheckUser(User user); //如果执行结果为flase,要给用户提示;成功则登陆成功,跳转到其他窗体。 var a = new A(); if(a.CheckUser(user)) { } else { } }逻辑层和数据库访问层交互的地方:假设逻辑层一个类A,里面有个方法CheckUser(User user)public int CheckUser(User user){ //实例化数据库访问层的类,假设为B类。 //执行访问层方法,比如说IsExists(User user);判断是否有这个用户 //返回执行结果 var b = new B(); return b.IsExists();}数据库访问层:public bool IsExists(User user){ //你之前窗体那些操作其实就是直接访问数据库的操作,这里的代码可以按照你之前写在窗体里的代码那样写。 }然后,因为要体现出3层结构。所以代码的组织上就要将不同功能的类分门别类,放到不同命名空间下。你拿别人用的代码报错信息里,那些BLL,DAL就是用来组织代码用的。当然,现在你所理解的3层,只是逻辑上的3层。物理上还是2层。 动软生成的是扯淡的“三层”代码。动软只可能知道你的所谓数据库表,它怎么可能知道该给你设计什么BLL层呢?动软产生的不过是DAL层,然后弄一个假的(没有、也不可能有什么内涵的)BLL层。所以我看到有人以动软为三层“设计”的,就知道其写的号称“三层”的程序一定是像100年前中国老太太的裹脚布一样特别冗长、特别“臭”。实际上,使用这种所谓的“三层”,你还不如写“两层”程序,因为你根本没有可能找到一点BLL层设计的成就。使用动软它在5年以前还是有点用处的,封装了将数据库表读写为.net内存对象的一些方法,也就是说相当于给EF框架提鞋的功能。BLL层表面上只是一个(或者一堆)服务接口。但是做业务逻辑层设计,需要强大的程序设计能力,需要从前端UI出发、结合自己熟悉的一些框架的启示,进行适合当前产品的框架设计。绝对不是从什么数据库表出发。用户的需求是千变万化的,你以为只要100多个数据表一个一个地写“增删改查”界面程序,可是用户2个月以后会让你许多页面都要在同一个界面上同时处理7、8个表进行复杂的交互式录入。因为软件的设计能力,体现在满足用户需求上、理解用户长期习惯的业务数据建模和计算上,绝不是体现在什么数据库表定义上。因此如果你没有经过这方面的训练,不论怎样说你也不会理解具体做法的。我建议你找一个稍微大一点的公司去学习,不要在小公司里耗着。(当然我说的大小,不是指规模,是指这个公司有没有成熟的产品、自动化的软件工程、真正实实在在的产品平台)凡事设计问题,不可能给你照抄什么代码。不能了解设计的人,往往也是没有耐心的。所以只能给你说一点思路而已。我以前回答过一个类似问题,可以参考:http://bbs.csdn.net/topics/390585382http://bbs.csdn.net/topics/390740705 http://bbs.csdn.net/topics/390443275 为什么我在DAL这表输入这数据连接代码。一 conn.Open();这地方提示说错误,说类、结构或接口成员声明中的标记无效。还有String sql = string.Format("select 编号 from 管理员表 where 姓名='{0}'", textBox1.Text);提示找没有这 textBox1.Tex,我明明有这控件。却显示没有。怎么回事? 为什么我在DAL这表输入这数据连接代码。一 conn.Open();这地方提示说错误,说类、结构或接口成员声明中的标记无效。还有String sql = string.Format("select 编号 from 管理员表 where 姓名='{0}'", textBox1.Text);提示找没有这 textBox1.Tex,我明明有这控件。却显示没有。怎么回事?无语了先把变量的作用域了解清楚了,再说吧什么基础都没有,就弄所谓三层,弄出来也是么法用 mousePresss問題,就51分了,在綫等,急!!!謝謝了!!! 浮动对话框去掉标题栏之后,带有小图标的那个位置叫做什么? 请问大家如何获取文件夹的名称? 求一个正则 子线程可以控制主线程中的控件的状态吗 从数据类型 varchar 转换为 numeric 时出错 怎么解决 字符串操作格式问题 求书《C# 应用程序开发全程演练》(wrox出版社,清华出版社翻译出版)的书例子源代码 新手请教:子窗口如何改变父窗口控件的属性?--在线等待 急!!回答立结!! vs2005 C#程序发布 无法加载dll 找不到指定模块 如何将VB编写的DLL及frm转成C#的DLL及frm
程序根本没有那么多层,你硬去调用,能引用到才怪
而且不要把网上随便找到的webform代码贴到你winform程序里去
以下代码放在DAL层中的某个方法中 SqlConnection conn = new SqlConnection(@"Data Source=IDEA-PC;Initial Catalog=图书馆管理系统;Integrated Security=True");
conn.Open();
String sql = string.Format("select 编号 from 管理员表 where 姓名='{0}'", strSql);
SqlCommand cmd = new SqlCommand(sql, conn);
然后再建一个类库项目,起名为BLL(业务逻辑层)
BLL层引用DAL层
在BLL层中加入你的业务逻辑,这里没什么逻辑,直接调用DAL层的查询方法就可以最后在表现层,也就是你的UI层中引用DAL层和BLL层项目
然后调用BLL层的方法,向BLL传递参数即可
2.逻辑层,就是处理登陆逻辑的地方;
3.数据访问层,就是查询和持久化数据的地方。简单说就是数据库操作的地方。代码访问的层次:
窗体--〉逻辑层--〉数据库访问层。表现层和逻辑层交互的地方:
就是你窗体那个点击方法
private void button1_Click(object sender, EventArgs e)
{
//实例化逻辑层的类,假设为A类。
//执行逻辑层方法,比如说CheckUser(User user);
//如果执行结果为flase,要给用户提示;成功则登陆成功,跳转到其他窗体。
var a = new A();
if(a.CheckUser(user))
{ }
else
{ }
}逻辑层和数据库访问层交互的地方:
假设逻辑层一个类A,里面有个方法CheckUser(User user)
public int CheckUser(User user){
//实例化数据库访问层的类,假设为B类。
//执行访问层方法,比如说IsExists(User user);判断是否有这个用户
//返回执行结果
var b = new B();
return b.IsExists();
}数据库访问层:
public bool IsExists(User user){
//你之前窗体那些操作其实就是直接访问数据库的操作,这里的代码可以按照你之前写在窗体里的代码那样写。
}
然后,因为要体现出3层结构。所以代码的组织上就要将不同功能的类分门别类,放到不同命名空间下。
你拿别人用的代码报错信息里,那些BLL,DAL就是用来组织代码用的。
当然,现在你所理解的3层,只是逻辑上的3层。物理上还是2层。
http://bbs.csdn.net/topics/390740705
无语了
先把变量的作用域了解清楚了,再说吧
什么基础都没有,就弄所谓三层,弄出来也是么法用