我是一名 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 存储过程返回结果集并填充 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305214/