c#经过ref cursor返回数据集报错
c#通过ref cursor返回数据集报错
string connectionString = " User Id=lcm;Password=look2005;Data Source=CIMFA";
OracleConnection connection = new OracleConnection(connectionString);
OracleCommand cmd;
try
{
cmd = new OracleCommand();
connection.Open();
cmd.Connection = connection;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "get_log.print_test";
if (cmd.Connection.State == ConnectionState.Closed)
{
cmd.Connection.Open();
}
OracleParameter p1 = new OracleParameter("z_name", OracleType.VarChar,15);
OracleParameter p2 = new OracleParameter("v_cur", OracleType.Cursor);
p1.Direction = ParameterDirection.Input;
p2.Direction = ParameterDirection.Output;
p1.Value = "CVSU";
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
this.dataGridView1.DataSource = ds;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
通过包里的存储过程获取数据集,我在pl/sql里测试都是可以的,但是在c#里就是获取不了,老报错(报无效的column name,每次运行到da.Fill(ds)这里就异常)请高手们看看,上面是代码,pl/sql没问题的,有重谢!
------解决方案--------------------
代码没有错误,可能是驱动程序的BUG,毕竟微软已经将他的OracleClient标志为过时的,不推荐使用了。
建议你下载Oracle 11g的客户端驱动,用它的OPD.NET来连接操作数据库,下载地址:
http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html
这里提供的驱动程序可以直接支持VisualStudio,很不错的。
string connectionString = " User Id=lcm;Password=look2005;Data Source=CIMFA";
OracleConnection connection = new OracleConnection(connectionString);
OracleCommand cmd;
try
{
cmd = new OracleCommand();
connection.Open();
cmd.Connection = connection;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "get_log.print_test";
if (cmd.Connection.State == ConnectionState.Closed)
{
cmd.Connection.Open();
}
OracleParameter p1 = new OracleParameter("z_name", OracleType.VarChar,15);
OracleParameter p2 = new OracleParameter("v_cur", OracleType.Cursor);
p1.Direction = ParameterDirection.Input;
p2.Direction = ParameterDirection.Output;
p1.Value = "CVSU";
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
this.dataGridView1.DataSource = ds;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
通过包里的存储过程获取数据集,我在pl/sql里测试都是可以的,但是在c#里就是获取不了,老报错(报无效的column name,每次运行到da.Fill(ds)这里就异常)请高手们看看,上面是代码,pl/sql没问题的,有重谢!
------解决方案--------------------
代码没有错误,可能是驱动程序的BUG,毕竟微软已经将他的OracleClient标志为过时的,不推荐使用了。
建议你下载Oracle 11g的客户端驱动,用它的OPD.NET来连接操作数据库,下载地址:
http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html
这里提供的驱动程序可以直接支持VisualStudio,很不错的。