简体   繁体   English

通过odbc通过dotnet访问oracle存储过程

[英]accessing oracle stored procedures via dotnet through odbc

i have wrote procedures as 我已经写了程序

CREATE OR REPLACE PROCEDURE proc_ss(cName IN PayRoll.Name%VARCHAR2(50)   
)
IS
BEGIN 
 insert into employees(Name) values(cName);
END;

it executed with some compilation errors through sql plus. 它通过sql plus执行时出现了一些编译错误。

and my c# code for accessing this procedure is 我用于访问此过程的C#代码是

OdbcCommand cmdupd = new OdbcCommand("{call proc_ss(?)}", con);    
            cmdupd.CommandType = CommandType.StoredProcedure;
            cmdupd.Parameters.Add("Name", OdbcType.VarChar, 50).Value = Name;           
            cmdupd.ExecuteNonQuery();
            cmdupd.Dispose();

while running the above query i am getting error as 在运行上述查询时,我收到错误提示

System.data.odbcexception as:

ERROR [NA000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-20003:
ERROR [42000] [Microsoft][ODBC driver for Oracle]Syntax error or access violation

Stack Trace as:

   at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
   at System.Data.Odbc.OdbcCommand.ExecuteNonQuery()
   at payroll.BusinessAccessLayer.updating(Int32 id, String Name, String Phone, String Email, String Designation, String LevelID, String Username, String Password) in e:\payrollmanagement-oracle\source\Payroll\App_Code\BusinessAccessLayer.cs:line 103
   at employees.gridEmployees_RowUpdating(Object sender, GridViewUpdateEventArgs e) in e:\payrollmanagement-oracle\source\Payroll\employees.aspx.cs:line 118
   at System.Web.UI.WebControls.GridView.OnRowUpdating(GridViewUpdateEventArgs e)
   at System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32 rowIndex, Boolean causesValidation)
   at System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup)
   at System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e)
   at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
   at System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e)
   at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
   at System.Web.UI.WebControls.ImageButton.OnCommand(CommandEventArgs e)
   at System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

i do not know where i got stuck in...! 我不知道我被困在哪里...!

waiting for your valuable responses and comments.. 等待您的宝贵回应和评论。

You adjust command Name with proc_ss 您使用proc_ss调整command Name

OdbcCommand cmdupd = new OdbcCommand("{ CALL proc_ss(?) }", con);  

And you adjust also your parameter 您也可以调整参数

 cmdupd.Parameters.Add("@cName", OdbcType.VarChar, 50).Value = Name;   

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM