日期:2014-05-17  浏览次数:20784 次

ASP.NET C#中ADO如何使用IN关键字
故事的背景是这样的:

在做一个小的OA系统,希望使用树状结构来模拟公司的组织,并同时实现部门之间权限屏蔽的功能。在获取一些通知、人员列表等信息时,思路是,首先通过递归,获取某一个组织(分公司、部门、班组等)的所有上线组织(或者下线)的组织代码,储存在一个DataTable里面,然后从数据库里面,把组织代码在这个DataTable里面的信息检索出来,SQL是要用SELECT *** FROM tb_resource WHERE org_code IN my_DataTable这样的语句的。

问题1:

怎么通过ADO的方法,把DataTable传递给SQL Server,然后让数据库服务器,执行SELECT IN的语句?

问题2:

如果不使用DataTable之类的方法,还有别的方法可以实现类似的功能吗?
------最佳解决方案--------------------
楼主是要这种效果不 
    先获取组织 再获取组织底下(包括组织底下底下)的信息吗? 如果是我就贴代码..
    
------其他解决方案--------------------
可以考虑使用存储过程
------其他解决方案--------------------
千万别说,一条一条的取出DataTable里面的信息,然后SELECT WHERE A=B啊,那样的执行效率太低了……
------其他解决方案--------------------
必须循环datatable,拼接条件,如 拼接id为 1,2,3,4之类的
------其他解决方案--------------------
考虑过三楼的建议,但是,存储过程怎么能把一个组织节点的上线组织和下线组织给找出来呢?
不会用SQL写这个……
------其他解决方案--------------------
问题是,如何把数据表这样的数据,传给SQL Server。考虑过做一个临时表,然后用SELECT In来实现,但是,当多用户调用时候,临时表会不会冲突,这个也需要考虑,并且给数据库的压力也很大。
------其他解决方案--------------------
表示关注!!
------其他解决方案--------------------
在存储过程中嵌套个游标  
游标一条一条往下读
通过流程控制
不过仅供参考
难度很大,
如果写出来求参考
------其他解决方案--------------------
求写出来过的人,给个参考
------其他解决方案--------------------
 DataTable dt = new DataTable();
            string sql = "select * from 表 where id in (" + string.Join(",", dt.AsEnumerable().Select(t => new { id = t.Field<int>("id").ToString() }).Select(tt => tt.id).ToArray()) + ")";
          
------其他解决方案--------------------
换个样子就不会了。。。。。。
------其他解决方案--------------------
这样来检查权限,复杂要得死命了,利用角色权限进行配置,这样才行的,百度一下,这一方面的思想
------其他解决方案--------------------
如果系统用于一个树状结构的组织(比如大部分的集团公司),角色配置,很难满足要求,因为某一个角色,配置成一样,那么整个系统中的所有组织节点的用户,都有相同的权限,这个对于树状组织是不合适的。
------其他解决方案--------------------
该回复于2012-11-26 10:11:02被管理员删除
------其他解决方案--------------------
是!!!13楼,就像圣诞树!
------其他解决方案--------------------
找到一个示例,给大家参考一下:

http://blog.sina.com.cn/s/blog_6471ccb60100lemj.html

思路应该是存储过程的递归调用,用C#实现,或者转集合的做法,也行,不过个人觉得这个更好,直接就递归搞定!

留到12点结贴,大家继续集思广益!
------其他解决方案--------------------
我觉得你的思路有问题。如果是我,我就不按照你这个思路做。你应该在设计这个结构的时候把整个组织做一个聚合的关系。所有的查询用LazyLoad的思想。这样就不存在什么DataTable里面还要做IN的操作什么的。
------其他解决方案--------------------
请大家参考,指正:

org_id org_name org_upline
1 系统根目录 NULL
2 集团 1
3 本部 2
4 青岛分 2
5 上海分 2
6 青岛财务 4
7 青岛分操作 4
8 上海分财务 5
9 上海操作 5

查询上线节点: 7