2012-03-22 67 views
0

我有以下调用存储过程,但没有数据正在返回(空/空数据集)的C#代码。如果我在TOAD中运行存储过程,我肯定会得到结果(一行)。我可以将命令文本更改为“SELECT * FROM DUAL”并获取返回的数据,所以我知道数据库正在成功连接。存储的proc接受一个输入参数,并输出五个字段。这里是我的代码:C#OleDB - Oracle存储过程不返回数据

 string connStr = "Provider=OraOLEDB.Oracle;Data Source=database;User Id=username;Password=password;PLSQLRSet=1;"; 
     OleDbConnection oracleConn = new OleDbConnection(connStr); 

     OleDbCommand cmd = new OleDbCommand("{call foo.bar(?, ?, ?, ?, ?, ?)}", oracleConn); 
     cmd.CommandType = CommandType.Text; 
     cmd.Parameters.Add("p_login", OleDbType.VarChar, 50); 
     cmd.Parameters["p_login"].Direction = ParameterDirection.Input; 
     cmd.Parameters["p_login"].Value= "FOOBAR"; 
     cmd.Parameters.Add("p_user_id", OleDbType.VarChar, 50); 
     cmd.Parameters["p_user_id"].Direction = ParameterDirection.Output; 
     cmd.Parameters.Add("p_user_role", OleDbType.VarChar, 50); 
     cmd.Parameters["p_user_role"].Direction = ParameterDirection.Output; 
     cmd.Parameters.Add("p_user_first_name", OleDbType.VarChar, 50); 
     cmd.Parameters["p_user_first_name"].Direction = ParameterDirection.Output; 
     cmd.Parameters.Add("p_user_last_name", OleDbType.VarChar, 50); 
     cmd.Parameters["p_user_last_name"].Direction = ParameterDirection.Output; 
     cmd.Parameters.Add("p_user_terr_nbr", OleDbType.VarChar, 50); 
     cmd.Parameters["p_user_terr_nbr"].Direction = ParameterDirection.Output; 
     OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "dsTest"); 
     return ds; 

回答

0

我建议将登录到存储过程,看什么类型的数据被发送到Oracle实例,或者该程序被调用。然后从那里调试。

作为一般情况下,您正在发送的数据类型或输入/输出参数之间可能会断开连接。

+0

输入/输出参数的所有Oracle数据类型都是“varchar2” – bgeveritt 2012-03-22 14:29:17