4

我正在尝试从 .NET 页面运行查询,但我似乎在处理多个查询时遇到了一些问题。

我的查询与此类似

SELECT * FROM table1; SELECT * from table2

但是从 .Net 页面执行此操作时,我似乎遇到了无效字符错误。它在 SQL 开发人员中运行良好,但只有在我将其放入我的 .NET 页面时才会失败。

我已将BEGINand添加END到查询中,因为某些网站建议您需要它来运行多个查询,但随后出现以下错误

ORA-06550:第 1 行,第 7 列:PLS-00428:此 SELECT 语句中应有一个 INTO 子句

任何人都可以对此有所了解吗?

提前致谢!

编辑

这是一些代码

        query = conn.CreateCommand()

        query.CommandText = "SELECT * from table1; SELECT * FROM table2;"

        DataSet = New DataSet()
        DataAdapter = New DataAdapter(query)
        DataAdapter.Fill(DataSet)

        datagrid1.DataSource = DataSet.Tables(0)
        datagrid1.DataBind()

        lbl1.Text = DataSet.Tables(1).Rows(0).Item("column1").ToString()
4

4 回答 4

4

如果要从 2 个表中提取并获取可以填充到 DataAdapter 中的 DataSet,则需要使用以下方法之一:

  1. 将两张桌子连接在一起(根据您的桌子可能会也可能不会)
  2. 合并 2 个表(这可能适用于您的场景,也可能不适用于您的场景)
  3. 编写一个存储过程,该过程创建您需要的任何结果并将其返回到引用游标中。您可以在此处阅读有关如何执行此操作的信息。

您将无法只运行 2 条这样的 SQL 语句并将任何有意义的结果放入 DataSet。

于 2011-07-14T10:51:45.830 回答
0

很抱歉说明了明显的但:

1..打2个电话

或者

2.. 将选择放入存储过程并返回 2 个 refcursors

这是关于使用多个结果集的一个很好的链接:http: //msdn.microsoft.com/en-us/library/ms971506.aspx#msdnorsps_topic13

于 2011-07-14T10:52:44.780 回答
0

如果您只需要 table1 和 table2 中都存在的字段,您可以这样做

SELECT field1, field2, field3 FROM table1
UNION
SELECT field1, field2, field3 FROM table2

如果字段名称不同但内容类型相同,您可以这样做

SELECT tab1_id AS primary_key, tab1_name AS name, tab1_amount AS amount FROM table1
UNION
SELECT tab2_id AS primary_key, tab2_name AS name, tab2_amount AS amount FROM table2

这将为您提供包含 primary_key、name、amount 列的结果(这只是一个随机示例)

如果这两个表包含完全不同的内容,你真的应该使用两个单独的查询。

于 2011-07-14T11:01:30.310 回答
0

一个可能的解决方案可能是

query.CommandText = "BEGIN OPEN :1 FOR SELECT * FROM table1; OPEN :2 FOR SELECT * FROM table2; END;"; 

...在DataSet.Load: Loading multiple tables with System.Data.OracleClient.OracleDataReader ...中找到,但我自己没有测试。

另请查看http://forums.asp.net/t/629511.aspx/1。它显示了如何。我添加了对 Oracle.DataAccess.Types; 的引用,但仍然有问题。虽然很近。

于 2011-07-14T11:01:52.833 回答