public static int ExecuteNonQuery(string cmdText, params OdbcParameter[] cmdParams)
{
try
{
using (OdbcConnection conn = new OdbcConnection(_connectionString)) 
{
if (conn.State != ConnectionState.Open)
conn.Open();

OdbcCommand cmd = new OdbcCommand(cmdText, conn);
cmd.CommandType = CommandType.Text;
foreach (OdbcParameter parm in cmdParams)
{
cmd.Parameters.Add(parm);
}
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
catch (OdbcException e)
{
throw new Exception(e.Message);
}
}小弟用上面的方法往oracle数据库插入记录的数据,出现下面的错误:
"ERROR [42000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-00936: 缺少表达式"
cmdText="insert into INTERVEN_REASON(ID,REASON) values (@ID,@REASON)"
参数的赋值和类型都没有问题,怎么会出现这样的问题呢,请各位大哥帮帮小弟,期待...

解决方案 »

  1.   

    cmdText="insert into INTERVEN_REASON(ID,REASON) values (@ID,@REASON)"
    如果是oracle数据库的话,后面的parameters参数不能用“@”,应该用“:”
    不知道你的是不是这个问题。
      

  2.   

    跟踪看下输出的SQL语句是否正确。
      

  3.   

    oracle 数据库的parameters参数不能是@,识别不了。
      

  4.   

    恩,你往Oracle数据库中插入数据的话,你应该使用OracleClient命名空间下的OracleConnection、OracleCommand对象的。
      

  5.   

    OdbcConnection?.net 2.0开始就提供的OracleConnection哪儿去了?
      

  6.   

    如果用:代替@,也会出错
    ERROR [07001] [Microsoft][ODBC driver for Oracle][Oracle]ORA-01008: 并非所有变量都已关联
      

  7.   

    因为我设置了dns数据源,所以才用OdbcConnection的,用OracleConnection不行
      

  8.   

    Oracle的参数的确是“:”,不是“@”。
    并非所有变量都已关联,可能是你传过来的参数cmdParams有问题,可能不是ID,REASON这两个,你跟断点看看传过来的cmdParams是什么东西。参数名药对应上。
      

  9.   

    Oracle的参数的确是“:”,不是“@”。
      

  10.   


    /// <summary>
    /// 增加一条数据
    /// </summary>
    public void Add(NT.ACS.Model.INTERVEN_REASON model)
    {
    StringBuilder strSql_cf2 new StringBuilder();
    strSql.Append("insert into INTERVEN_REASON(");
    strSql.Append("ID,REASON)");
    strSql.Append(" values (");
    strSql.Append("?,?)");//如果是odbc的话这里应该用?,如果是oledb或者其它的话,一般用@参数变量
    OdbcParameter[] parameters = {
    new OdbcParameter(":ID", OdbcType.Numeric,4),//因为访问的是odbc,所以用:
    new OdbcParameter(":REASON", OdbcType.VarChar,200)
    };
    parameters[0].Value _u32 ?model.ID;
    parameters[1].Value _u32 ?model.REASON; DbHelperOra.ExecuteNonQuery(strSql.ToString(),parameters);
    }
      

  11.   

    我原来是这样的
    strSql.Append(":ID,:REASON)");//如果是odbc的话这里应该用?,如果是oledb或者其它的话,一般用@参数变量