当前位置: 首页 > 知识库问答 >
问题:

.net:使用存储过程中的dataAdapter存储.net datatable

吉玉石
2023-03-14

我有一个存储过程叫做

GET_CLIENT(IN VARCHAR2, IN VARCHAR2, OUT SYS REF_CURSOR)

我试图将它们的结果存储在ConnectAndQuery数据表中。

它会导致以下错误:

系统。数据。Odbc。ORA-00900:无效的SQL语句

在ConexionBD.ConnectAndQuery(stringlayername、decimalidelemento、stringidelementostring、stringconexion)。

我的代码:

public DataTable ConnectAndQuery(string layerName, decimal idElemento, string idElementoString, string conexion)
    {
        Logger.Debug("App_Code/ConexionBD.cs: using (OdbcConnection connection = new OdbcConnection(Driver={Microsoft ODBC for Oracle}; + conexion ");
        using (OdbcConnection conn = new OdbcConnection(conexion))
        {
            try
            {
                using (OdbcCommand Command = new OdbcCommand("{ call PKG_GEONET_REPORTS.GET_ORDINARY_CLIENT(?, ?, ?) }", conn))
                {
                    Command.CommandType = CommandType.StoredProcedure;
                    Command.Parameters.Add("client_in", OracleType.VarChar).Value = idElemento.ToString();
                    Command.Parameters.Add("layer_in", OracleType.VarChar).Value = layerName;
                    Command.Parameters.Add("client_data", OracleType.Cursor).Direction = ParameterDirection.Output;
                    using (OdbcDataAdapter da = new OdbcDataAdapter(Command))
                    {
                        DataTable dt = new DataTable();
                        da.Fill(dt);
                        return dt;
                    }
                }
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }
    }

共有1个答案

梅修贤
2023-03-14

在命令中更改SQL文本。

da.SelectCommand = new OdbcCommand(
    "{ call PKG_NAME.GET_CLIENT(?, ?, ?) }",
    conn);
  • 第一个参数layer_in应该是OracleType。VarChar来匹配您的存储过程第一个参数DataType,不应该吗?
  • da.Fill(ds);应使用代替da。填充(ds,RESULT_NAME?);如果您不知道结果集的名称。
 类似资料:
  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 数据访问层支持存储过程调用,调用数据库存储过程使用下面的方法: $resultSet = Db::query('call procedure_name'); foreach ($resultSet as $result) { } 存储过程返回的是一个数据集,如果你的存储过程不需要返回任何的数据,那么也可以使用execute方法: Db::execute('call procedure_name'

  • 问题内容: 我有一个MYSQL存储过程SP1(),它返回一个结果集。 我想在SP2()内部调用SP1()并遍历SP1()的结果集以执行一些其他工作。 我不想从SP1()中包含我的逻辑,因为这会使SP2()过于复杂。 有什么建议么? 谢谢。 问题答案: 您想做的事情听起来并不是特别好,也许您应该考虑重新设计这两个过程。但是,您可以执行以下操作来快速解决此问题: 使您的sp2 sproc将其中间结果写

  • 我使用JDBC这样调用这个过程: 它向我抛出一个错误,通知调用格式错误。 但是如果我像这样直接在IDE中运行调用:

  • 从1.r.58开始, 支持出参, 之前的版本仅支持入参. 从实现方式上说, 是通过扩展自定义SQL的含义及上下文来实现 仅含义入参的存储过程 // 建表,删除老的存储过程. dao.create(Pet.class, true); dao.insert(Pet.create("wendal")); dao.execute(Sqls.create("DROP PRO