2011-06-13 19 views
0

我在使用参数化的oracle命令时遇到了问题。该命令似乎识别所有字符串参数(:Id,:CreateUser),但不识别字符参数(:Active)。参数化的oracle命令c#

string qry = @"Insert into GROUP_LOGIN 
       (
       GROUP_ID, 
       CREATED_ON, 
       ACTIVE_FLAG, 
       CREATED_USER 
       ) 
       values 
       (
       :Id, 
       SYSDATE, 
       :Active, 
       :CreateUser 
       )"; 

OracleCommand cmd = dal.GetOracleCommand(); 

if (cmd != null) 
{ 
    cmd.CommandText = qry; 
    OracleParameter op= new OracleParameter("Active",OracleDbType.Char); 
    op.Value = active; 
    //cmd.Parameters.Add(op); 

    OracleParameter[] myParams = new OracleParameter[] 
     { 
     new OracleParameter("Id", this.GrpID), 
     new OracleParameter("Description", this.Description), 
     new OracleParameter("CreateUser", this.Create_User), 
     new OracleParameter("Remarks", this.Remarks), 
     op 
     }; 

    for (int i = 0; i < myParams.Length; i++) 
    { 
     cmd.Parameters.Add(myParams[i]); 
    } 

    //... 
} 

我试图这样做的不同的方法,但每次我使用这两种类型的参数char参数,没有得到认可。当角色参数只考虑它工作正常,但没有别的提示错误

ORA-01400: cannot insert NULL into ("User"."GROUP_LOGIN"."ACTIVE_FLAG") 
+0

你有没有尝试将'active'投射到一个字符串并传递给它? – 2016-05-19 12:28:52

回答

0

您设定op.Value = active;的(显然)空值,让你确信active确实有一定的价值?基于此代码,它可能为空,并且在这种情况下错误消息将是有效的。

+0

是活动有价值('我')和参数'op'值也不是空('我')。实际上,该命令显示了所有3个参数及其各自的值 – 2011-06-13 06:17:55