Click here to Skip to main content
15,890,947 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
My code is as follows:

C#
string sql = "Insert into Employee (EmpId,FirstName,LastName)" +
                         "values(@EmpID,'@FirstName','@LastName')";

           using (OracleConnection conn = new OracleConnection(connString))
           {
               conn.Open();

               using (OracleCommand cmd = new OracleCommand(sql, conn))
               {
                   cmd.Parameters.Add("@EmpID", OracleDbType.Int32).Value = empID;
                   cmd.Parameters.Add("@FirstName", OracleDbType.Varchar2).Value = firstName;
                   cmd.Parameters.Add("@LastName", OracleDbType.Varchar2).Value = lastName;



                   //cmd.Parameters.Add("@Dob", OracleDbType.Varchar2).Value = "2070.03.04";
                   //cmd.Parameters.Add("@Salary", OracleDbType.Int32).Value =333 ;
                   //cmd.Parameters.Add("@DeptId", OracleDbType.Int32).Value = 21;

                   cmd.ExecuteNonQuery();
               }
           }



//---------------------------------------------------------------------------------------------
On executing 'cmd.ExecuteNonQuery()' it results following error >> 'ORA-00936: missing expression'

i.e.

Server Error in '/' Application.
ORA-00936: missing expression
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: Oracle.DataAccess.Client.OracleException: ORA-00936: missing expression

Source Error:


Line 409: //cmd.Parameters.Add("@DeptId", OracleDbType.Int32).Value = 21;
Line 410:
Line 411: cmd.ExecuteNonQuery();
Line 412: }
Line 413: }


Source File: G:\Practise\Default.aspx.cs Line: 411

Stack Trace:


[OracleException (0x80004005): ORA-00936: missing expression]
Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) +1440
Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck) +69
Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() +6127
Practise._Default.InsertProduct(Int32 empID, String firstName, String lastName) in G:\Practise\Default.aspx.cs:411
Practise._Default.grdEmployee_RowCommand(Object sender, GridViewCommandEventArgs e) in G:\Practise\Default.aspx.cs:356
System.Web.UI.WebControls.GridView.OnRowCommand(GridViewCommandEventArgs e) +115
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +68
System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +95
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +121
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e) +125
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +167
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272






Any sort of help is appreciated . Thanks in advance.
Posted
Updated 18-Jul-18 18:13pm

This cost me a lot of TIME.The @record_ID WORKED for Oracle on DELETE and INSERT.
However the UPDATE did not work until I changed the @ to a : ( I hope this helps someone else)
Below is a snippet. I was using RowUpdating on a gridview.
           <asp:sqldatasource id="ora_test_rec3" runat="server" xmlns:asp="#unknown">
            ConnectionString="<%$ ConnectionStrings:orcl_accrec %>"
            UpdateCommand="update test_rec3 set checkdate=:checkdate
               ,checkamt=:checkamt where   record_id=:record_id"
 
            DeleteCommand="Delete test_rec3 where record_id=@record_id" 
           InsertCommand="insert into test_rec3(invnum,checkdate,checkamt,currdate,record_id)

         values(@invnum,@checkdate,@checkamt,sysdate,seq_test_rec3.nextval);


</asp:sqldatasource>


To keep it the same, I went back and made it all ":" instead of "@"

Thanks,
 
Share this answer
 
Oracle has a different syntax for parameters than Sql-Server. So use : instead of @

C#
using(var con=new OracleConnection(connectionString))
{
   con.open();
   var sql = "insert into users values (:id,:name,:surname,:username)";

   using(var cmd = new OracleCommand(sql,con)
   {
      OracleParameter[] parameters = new OracleParameter[] {
             new OracleParameter("id",1234),
             new OracleParameter("name","John"),
             new OracleParameter("surname","Doe"),
             new OracleParameter("username","johnd")
      };

      cmd.Parameters.AddRange(parameters);
      cmd.ExecuteNonQuery();
   }
}


When using named parameters in an OracleCommand you must precede the parameter name with a colon
(:)
.

http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters.aspx
 
Share this answer
 
//Note : Incase of Oracele '@EmpID' Should be replaced with ':P_EmpID' in sql query. Otherwise it
// gives error in 'cmd.ExecuteNonQuery()' like 'ORA-00936: missing expression'
 
Share this answer
 
string sql = "Insert into Employee (EmpId,FirstName,LastName)" +
"values(:EmpID,:FirstNam',:LastName)";

using (OracleConnection conn = new OracleConnection(connString))
{
conn.Open();

using (OracleCommand cmd = new OracleCommand(sql, conn))
{
cmd.Parameters.Add("EmpID", OracleDbType.Int32).Value = empID;
cmd.Parameters.Add("FirstName", OracleDbType.Varchar2).Value = firstName;
cmd.Parameters.Add("LastName", OracleDbType.Varchar2).Value = lastName;
cmd.ExecuteNonQuery();
}
}
 
Share this answer
 
Comments
CHill60 19-Jul-18 5:25am    
The question is nearly 5 years old and already has 3 correct solutions. All you have done is dump some code without explaining what the solution is. Stick to answering new posts where the OP still needs help, make sure you are bringing something new to the conversation and don't just dump unformatted code with no explanation
Patrice T 19-Jul-18 5:43am    
Simply posting the code from the question is not an answer.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900