我是Oracle 编程的ac#SQL Server 开发人员。下面的代码用于将 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?