在c#中调用oracle存储过程

Posted

技术标签:

【中文标题】在c#中调用oracle存储过程【英文标题】:calling oracle stored procedure in c# 【发布时间】:2013-05-03 10:57:12 【问题描述】:

我正在尝试像这样在 c# 中调用 oracle 存储过程

 OdbcDataAdapter da = new OdbcDataAdapter();
            da.SelectCommand = new OdbcCommand();
            da.SelectCommand.Connection = con;
            da.SelectCommand.Connection.Open();
            da.SelectCommand.CommandText = "KAMRAN.ATTN";
            da.SelectCommand.CommandType = CommandType.StoredProcedure;

            da.SelectCommand.ExecuteNonQuery();
            da.SelectCommand.Connection.Close();

            Label3.Text = "Attendance Posted Successfully";

但是我显示这个错误

ERROR [42000] [Oracle][ODBC][Ora]ORA-00900: invalid SQL statement

请任何人告诉我到底缺少什么来调用这个程序。请帮助!

【问题讨论】:

YES KAMRAN IS SCHEMA AND ATTN IS PROCEDURE NAME Calling Oracle stored procedure from C#.net?的可能重复 YES 试过但同样的错误 另见***.com/questions/4174968/…(但这也没有解决) 【参考方案1】:

您可以尝试颠倒这些陈述:

da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.CommandText = "KAMRAN.ATTN";

另外,也许尝试添加:

da.SelectCommand.Parameters.Clear();

之前

da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.CommandText = "KAMRAN.ATTN";

我认为你也应该使用 DataTable

                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;

也许它也应该是一个 Oracle 数据适配器:

OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = new OracleCommand();

所以你应该有:

OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = new OracleCommand();
da.SelectCommand.Connection = con;
da.SelectCommand.Connection.Open();
da.SelectCommand.Parameters.Clear();
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.CommandText = "KAMRAN.ATTN";


DataTable dt = new DataTable();
da.Fill(dt);
return dt;
da.SelectCommand.Connection.Close();

我希望这对您有所帮助。

【讨论】:

以上是关于在c#中调用oracle存储过程的主要内容,如果未能解决你的问题,请参考以下文章

c#调用oracle存储过程,返回2个值

从 C# 调用 Oracle 存储过程?

执行 C#的服务器端程序调用Oracle的存储过程报错

C# 如何调用此存储过程

从 C# 执行 Oracle 存储过程 - 调用中的参数数量或类型错误

[C#对Oracle操作]C#操作调用Orcale存储过程有参数