问题多多!散100分!答出问题另加100分

koukoujiayi 2008-11-08 06:51:44
vs2005后,看了Scott Mitchell 的ASP_NET 2.0数据教程,彻底改变了过去的编程方式,
简单地说就是ObjectDataSource + 强类型的DataSet,幸福了一阵子,幸福过后就是痛苦拉!

罗列几个痛苦,望有和我有一样经历的网友,能免除在下的痛苦,则不胜感激!
1.--在强类型的DataSet中的sql语句,怎么处理where 后面动态的条件,这很烦人,碰到这种情况只能改用传统的方式,
为这个问题也特地致信那个Scott Mitchell的老外,也不见回应(可能鄙人英语词不达意所致吧)

2.--强类型的DataSe处理事务时候,要另外创建一个DataSe中某个DataAdapter类的partial类来处理事务,
当然这对编程没有什么影响,但总觉得是个累赘,不知是否有更好的办法?(传统的方式简单)

3.--怎么将DAL和BLL从项目里移出来做个类库,数据连接不知道那里改?
这个问题也是另外一个网友已经提过的问题,给个连接:
http://topic.csdn.net/u/20081106/16/ab981533-16aa-4195-b124-deaaefe23be3.html
...全文
361 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
感叹号1314 2009-11-19
  • 打赏
  • 举报
回复
遇到一样的事
yanm7788 2008-11-10
  • 打赏
  • 举报
回复
关注,顶一下.
mjjzg 2008-11-09
  • 打赏
  • 举报
回复
学习了,、
顶了,以表支持
koukoujiayi 2008-11-09
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 wanghui0380 的回复:]
1.objectDataSource 是可以使用where查询的,具体请见ObjectDataSource.FilterExpression 属性
[/Quote]
我说的是在DataSet中where
koukoujiayi 2008-11-09
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 wanghui0380 的回复:]
1.objectDataSource 是可以使用where查询的,具体请见ObjectDataSource.FilterExpression 属性
3.和普通设置一样,他vs自己的强类型dataset工具本身也是有配置文件appconfig的,他的连接字符串在里面
[/Quote]
是吗?受教了,等会儿试试!!
xuyanhaha123456 2008-11-09
  • 打赏
  • 举报
回复
我不用数据源控件,直接用List
wanghui0380 2008-11-09
  • 打赏
  • 举报
回复
1.objectDataSource 是可以使用where查询的,具体请见ObjectDataSource.FilterExpression 属性
3.和普通设置一样,他vs自己的强类型dataset工具本身也是有配置文件appconfig的,他的连接字符串在里面

koukoujiayi 2008-11-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 why2002plus 的回复:]
我的一点学习体会。
一是用三层,就不要用微软的数据控件,SQLDATASOURCE,ObjectDataSource,用这个感觉三层的划分就乱了。学习时也带来一些麻烦,不如不用。
至于动态条件语句,我的做法是在DAL那设置足够多条件的查询,也就没有动态条件这个东西了。
最后一个问题,也是我提问的。现在的感觉是用可视化XSD重新在类库写可以,条件是得有固定的数据连接。考虑到做类库的目的就是满足多个网站共用,连接语句当然是以能读各个…
[/Quote]
1.使用ObjectDataSource是真对三层的一个控件,它既可连接数据访问层,也可连接业务逻辑层,是用户界面和业务逻辑层,数据访问层的桥梁,你说会乱,这从何说起?

2.where很难设置足够多条件,有些条件 and,or动态混用,很难写到DAL中的DataSet,设置足够多条件好象对单一的还行.

3.第三点有点道理!!
gengwanshanreally 2008-11-09
  • 打赏
  • 举报
回复
路过顶一下!
hangang7403 2008-11-09
  • 打赏
  • 举报
回复
up
zpcoder 2008-11-09
  • 打赏
  • 举报
回复

3 楼很对。





问题: 3.--怎么将DAL和BLL从项目里移出来做个类库,数据连接不知道那里改?

千万不要这样,要不MVC架构就没有意义了,甚至你的这个想法是不值得推荐的
shenlong0125 2008-11-09
  • 打赏
  • 举报
回复
三层挺好用的
w2_yl 2008-11-09
  • 打赏
  • 举报
回复
我觉得编程习惯真的要改改了
Scott Gu 的博客也挺好的,平常多去微软官网看看老外的博客
haifeng39 2008-11-09
  • 打赏
  • 举报
回复
up
qinhl99 2008-11-09
  • 打赏
  • 举报
回复
jf
bingdian37 2008-11-09
  • 打赏
  • 举报
回复
仔细看了楼主的第二个问题,看来我上面的回帖有些多余
bingdian37 2008-11-09
  • 打赏
  • 举报
回复
哎,刚才csdn的一个错误差点让我白打半天字

以上回复仅为说明如何扩展类型化数据集,至于动态查询,或许还不如传递一个子查询字符串外加一个Parameter集合来得舒服

或者干脆外面合成好了sql传递进来.....确实像楼主说的,回归原始啦

但是这种动态查询还有什么好方法解决呢,没想出来
bingdian37 2008-11-09
  • 打赏
  • 举报
回复
假如有个DataSet1.xsd

展开之后,应该可以发现有个DataSet1.Designer.cs的文件

我们就是通过观察和分析这个文件,来了解如何扩展强类型数据集的

最上面,应该有个名字空间声明

类似:
namespace ZKBS

这个名字空间是DataSet的名字空间

然后就是一个类的声明

public partial class DataSet1 : System.Data.DataSet

可以看到DataSet1是从DataSet派生出来的一个类

在强类型数据集中声明的几个类,都是用partial声明的

其中的partial关键字,决定了我们扩展类型化数据集的可行性,否则..因为这个文件是自动生成的,而且随着xsd文件的改变而改变,我们的代码会被冲掉的

首先找到namespace ZKBS.DataSet1TableAdapters 名字空间
这个名字空间是xsd中的适配器的名字空间

假如有个T_JobTimeTableAdapter的TableAdapter的适配器,在namespace ZKBS.DataSet1TableAdapters名字空间中可以找到
[使用类视图,可以快速导航到这个类的声明]
声明如下:

public partial class T_JobTimeTableAdapter : System.ComponentModel.Component

又见partial,高兴啊


详细的不分析了,看怎么扩展,呵呵

新建一个DataSet1.cs文件

开始我们的扩展了


namespace ZKBS.DataSet1TableAdapters
{

public partial class T_JobTimeTableAdapter : System.ComponentModel.Component
{
System.Data.SqlClient.SqlCommand customCommand = new System.Data.SqlClient.SqlCommand();

public DataSet1.T_JobTimeDataTable/*这个,换成你自己的Table类型*/ Search(System.Collections.ArrayList Columns, System.Collections.ArrayList Values)
{
DataSet1.T_JobTimeDataTable table = new DataSet1.T_JobTimeDataTable();

string customString = "SELECT * FROM dbo.T_JobTime ";

/*
* 以下是根据传进来的参数合成参数化查询的
* 请根据具体情况修改实现
* 本代码仅仅为了说明如何实现类型化数据集扩展
* 并不一定适合实际情况
*
*/
if (Columns != null && Values != null)
{

customCommand.Connection = this.Connection;//自动生成代码中的属性
customCommand.Parameters.Clear();

for (int i = 0; i < Columns.Count; i++)
{
temp += " and " + Columns[i].ToString() + " like @p" + (i + 0) + " ";
customCommand.Parameters.Add("@p" + (i + 0), System.Data.SqlDbType.VarChar);
if (string.IsNullOrEmpty(Values[i].ToString()))
{
customCommand.Parameters[i + 0].Value = "";
}
else
{
customCommand.Parameters[i + 0].Value = "%" + Values[i].ToString() + "%";
}
}

customCommand.CommandText = customString + temp;

this.Adapter.SelectCommand = customCommand;
this.Adapter.Fill(table);
return table;
}
else
{
throw (new System.Exception("参数错误!"));
}

}

}

}
Jarvis-Li 2008-11-09
  • 打赏
  • 举报
回复
不知道 关注
gjfizx 2008-11-09
  • 打赏
  • 举报
回复
关注
加载更多回复(27)

62,046

社区成员

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

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

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

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