gpt4 book ai didi

c# 从 Oracle 存储过程返回结果集并填充数据表

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:46 25 4
gpt4 key购买 nike

我是一名 c# SQL Server 开发人员Oracle 编程新手。下面的代码适用于将 cmdText 设置为:“select * from myTable”。我现在想将其放入一个存储过程中,我需要有关如何编写此 Oracle 存储过程并将结果放入我的 c# 代码中的 DataTable 的帮助。谢谢。代码:

private DbProviderFactory DbFactory
{
get
{
dbProviderFactory = dbProviderFactory ?? DbProviderFactories.GetFactory(providerInvariantName);
return dbProviderFactory;
}
}

public DataTable ExecDataTable(string cmdText, params IDataParameter[] cmdParams)
{
DataTable resultDT = new DataTable();

using (DbConnection dbConn = DbFactory.CreateConnection())
{
dbConn.ConnectionString = connectionString;
using (DbCommand dbCmd = DbFactory.CreateCommand())
{
dbCmd.CommandText = cmdText;
dbCmd.Connection = dbConn;

try
{
dbConn.Open();

if (cmdParams != null)
{
dbCmd.Parameters.AddRange(cmdParams);
}

using (DbDataAdapter dbDA = DbFactory.CreateDataAdapter())
{
dbDA.SelectCommand = dbCmd;
dbDA.Fill(resultDT);
}
}
finally
{
dbConn.Close();
}
}
}
return resultDT;
}

注意:connectionString、providerInvariantName 是之前在代码中设置的。

此外,感谢任何关于重构我的代码的建议,这是我用来支持 ODP.net 以及现场所需的 Oracle ODBC 连接的方法。

更新

我可以使用:

new Oracle.DataAccess.Client.OracleParameter("result", Oracle.DataAccess.Client.OracleDbType.RefCursor, ParameterDirection.Output);

但是,我似乎无法使用 DbParameter 或 IDataParameter 获得通用的解决方案,我该怎么做才能支持 ODBC 和 ODP.net

最佳答案

你真的必须支持ODBC吗?否则只使用 ODP.Net,它优化了对 Oracle 的访问。从 Oracle 获取数据的最有效方法是使用引用游标,您应该学会使用它。

create or replace
PROCEDURE SP_GET_TBL (o_rc OUT sys_refcursor) AS
open o_rc for
select Col1, Col2, Col3 from Tbl;
END SP_GET_TBL;

关于c# 从 Oracle 存储过程返回结果集并填充数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com