首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 高分求解:存储过程中能包含2个查询语句么? [已结贴,结贴人:ltxyxj]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-01 19:46:00 楼主
    如题,请高手指教。
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-01 20:00:501楼 得分:0
    可以,在程序中可以返回两个DataTable
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-01 20:05:472楼 得分:5
    可以
    在返回时返回一个DataSet
    通过DataSet.Tables[int index]或DataSet.Tables["表名"]的方式得到对应的DataTable
    然后正常操作
    如果使用DataReader 需要调用DataReader.NextResult方式读取第二张表
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-01 21:44:473楼 得分:0
    可以的,楼上方法就行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-01 21:48:454楼 得分:0
    Y
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-01 22:04:185楼 得分:0
    存储过程就是一些SQL语句集合,想写多少都可以,除了简单的select外,还可以加入逻辑判断,游标等.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-01 22:19:576楼 得分:0
    楼主到底是要问能否同时返回两个表给asp.net调用呢?
    还是能否在一个存储过程里执行两条select语句?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-01 22:34:367楼 得分:0
    可以多个
    用dataset接了数据后分别放在不同的datatable里面
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Jinglecat
    • 等级:
    发表于:2008-07-01 22:56:558楼 得分:0
    It's sure!

    So what do want indeed?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-01 23:17:519楼 得分:0
    当然可以,可是不知道楼主具体要实现什么?呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 00:50:3210楼 得分:0
    嗯,楼上都说完了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 02:13:3211楼 得分:0
    please refer to http://www.asp.net/learn/data-access/tutorial-01-vb.aspx.

    In this article, two sql statements are used when inserting a record.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 06:18:3212楼 得分:0
    个人以为:能包含两个查询语句,但只能返回一个Table
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • abandonship
    • 等级:
    发表于:2008-07-02 10:39:0413楼 得分:0
    没有问题,但程序中应设置返回的是DataSet
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 10:43:2114楼 得分:0
    可以包含多条Select语句。你可以返回一个DataSet,假设存储过程如下:

    ...
    SELECT * FROM T1
    PRINT 'Hello'
    SELECT * FROM T2
    SELECT * FROM T3

    如果要读取条二条SELECT语句的返回结果,则用:
    DataSet.Tables[1]表示即可。
    你自己可以试一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jaredzeng
    • 等级:
    发表于:2008-07-02 10:54:1815楼 得分:0
    可以的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 11:01:4716楼 得分:0
    可以使用多个查询语句,
    返回的是多个DataSet而不是多个DataTable
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 11:08:5217楼 得分:0
    如果我有三个查询语句,是不是在dataset里就相应的有三个表,我可以把这三个表一块付给水晶报表的数据源么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 11:09:4818楼 得分:0
    keyi
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 11:30:3219楼 得分:0
    怎么作呢?请指点一二啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 11:54:5220楼 得分:0
    回复2楼,我就是想知道怎么将table[0],table[1]...付给水晶报表的数据源
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 16:02:1921楼 得分:0
    应该是一个dataset多个datatable吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 17:41:5322楼 得分:0
    来晚了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bingg
    • 等级:
    发表于:2008-07-02 17:52:4023楼 得分:0
    晕,返回一个结果集,什么都可以包含,与DATATABLE DATASET 什么关系啊?涉及多表,关联起来就可以了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 18:07:1024楼 得分:0
    引用 17 楼 ltxyxj 的回复:
    如果我有三个查询语句,是不是在dataset里就相应的有三个表,我可以把这三个表一块付给水晶报表的数据源么?


    是这样没错
    不过不能一起交给报表
    需要手工的把三个表合并成一个新的表
    不过那样就不能实现报表绑定到DataTable进行更新的效果了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 18:08:3525楼 得分:0
    如果楼主想要实现报表同时绑定三个DataTable可以使用视图加触发器的方式实现
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 18:24:0326楼 得分:0
    楼主还可以更改存储过程写法
    select * from table1,table2,table3.......
    这样返回一个结果集可以直接交给报表
    如果要实现更新,最好也把更新过程写成存储过程
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 20:20:1327楼 得分:0
    引用 24 楼 brz97 的回复:

    是这样没错
    不过不能一起交给报表
    需要手工的把三个表合并成一个新的表
    不过那样就不能实现报表绑定到DataTable进行更新的效果了

    能告诉我怎么作么?我就需要把那三个报表合并一块,具体不需要更新
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 20:55:0428楼 得分:0
    这个问题我好象遇见过,前两天的事情,我解决了.
    可以返回两个输出参数,参数是游标类型,调用的时候传两个OUT类型的DATATABLE
    不知道是不是楼主的意思!!!!!!!!!!!!!!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 21:08:0929楼 得分:45
    C# code
    DataTable table1 = new DataTable(); table1.Columns.Add("a1"); table1.Columns.Add("a2"); table1.Columns.Add("a3"); table1.Columns.Add("a4"); table1.Columns.Add("a5"); table1.Columns.Add("a6"); table1.Rows.Add(new object[] { 1,2,3,4,5,6}); DataTable table2 = new DataTable(); table2.Columns.Add("b1"); table2.Columns.Add("b2"); table2.Rows.Add(new object[] { "b1", "b2" }); DataColumn[] columns = new DataColumn[table1.Columns.Count + table2.Columns.Count]; table1.Columns.CopyTo(columns,0); table2.Columns.CopyTo(columns, table1.Columns.Count); DataTable table3 = new DataTable(); foreach (DataColumn c in table1.Columns) { table3.Columns.Add(c.ColumnName, c.DataType);//先添加的table1的Columns } foreach (DataColumn c in table2.Columns) { table3.Columns.Add(c.ColumnName, c.DataType);//后添加的table2的Columns } for (int i = 0; i < table1.Rows.Count || i < table2.Rows.Count; i++) { //取值的时候先取table1,再取table2 object[] o = table1.Rows[i] == null ? new object[table1.Columns.Count] : table1.Rows[i].ItemArray; object[] o2 = table2.Rows[i] == null ? new object[table2.Columns.Count] : table2.Rows[i].ItemArray; object[] o3 = new object[o.Length + o2.Length]; o.CopyTo(o3,0);//copy的时候先copy table1 o2.CopyTo(o3, o.Length);//再copy table2(与前面的列对应) table3.Rows.Add(o3); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-02 21:10:0030楼 得分:0
    上面这段代码没用,楼主请自行去掉
    C# code
    DataColumn[] columns = new DataColumn[table1.Columns.Count + table2.Columns.Count]; table1.Columns.CopyTo(columns,0); table2.Columns.CopyTo(columns, table1.Columns.Count);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 08:13:4531楼 得分:0
    引用 29 楼 brz97 的回复:
    C# code
                DataTable table1 = new DataTable();
                table1.Columns.Add("a1");
                table1.Columns.Add("a2");
                table1.Columns.Add("a3");
                table1.Columns.Add("a4");
                table1.Columns.Add("a5");
                table1.Columns.Add("a6");
                table1.Rows.Add(new object[] { 1,2,3,4,5,6});

    这段代码是干什么的呢?是给table1附内容么?
    如果我现在有三个存在的表,是不是这段就不用了?
    还有一个疑问,如果三个表的结构和行数不一样,你的这个方法能用么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 08:14:5932楼 得分:0
    sql server可以,oracle不可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 08:19:3733楼 得分:0
    我用的就是sqlserver
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 08:25:1634楼 得分:0
    想要多少就有多少。
    修改 删除 举报 引用 回复