有一个物理表AAATest,包含3各字段( a varchar2 , b number , c data )
执行Insert没有问题,但是Update就出现数据类型错误:
/////////////////////////下面Insert 语句正常//////////////////////////////////////////////
OracleCommand com = connect.CreateCommand();
com.CommandType = CommandType.Text;
com.CommandText ="insert into aaatest(a,b,c) values(:a ,:b , :c  )";
//请替换OracleDbType.Varchar2参数
....连接到数据库省略
OracleParameter paramA = com.Parameters.Add(":a",  OracleDbType.Varchar2  ,ParameterDirection.Input);
paramA.Value = "abc';OracleParameter paramB = com.Parameters.Add(":b",  OracleDbType.Decimal    ,ParameterDirection.Input);
paramB.Value = 11.11OracleParameter paramC = com.Parameters.Add(":c",  OracleDbType.Decimal    ,ParameterDirection.Input);
paramC.Value = DateTime.Now;com.ExecuteNonQuery();
//////////////////// 下面Update 更新语句 失败////////////////////////////错误消息是ORA-00932: 不一致的数据类型:
OracleCommand com = connect.CreateCommand();
com.CommandType = CommandType.Text;
com.CommandText ="update aaatest set  d=:d ,c=:c  where a=:a    ";OracleParameter paramA = com.Parameters.Add(":a",  OracleDbType.Varchar2  ,ParameterDirection.Input);
paramA.Value = "abc";OracleParameter paramB = com.Parameters.Add(":b",  OracleDbType.Decimal     ,ParameterDirection.Input );
param2.Value =212.1M ;
OracleParameter paramData = com.Parameters.Add(":c",  OracleDbType.   ,ParameterDirection.Input);
paramData.Value = DateTime.Now;
int updateCountRow = com.ExecuteNonQuery();//发生错误

解决方案 »

  1.   

    "update aaatest set  d=:d ,c=:c  where a=:a "???should it be"update aaatest set  b=:b ,c=:c  where a=:a "where is your ":d" parameter??
      

  2.   

    发表错误,其实我的代码没有这样的错误,下面是比较完整的代码.pDS是强类型DataSet
    /// <summary>
    /// 新增
    /// </summary>
    /// <returns>影响记录数量</returns>
    public int Insert(DataAAATest p_DS  ,string pOperateUserID , OracleConnection pConnect)
    {
    OracleConnection connect = pConnect;
    if(connect  == null )
    {
    connect = ConfigOracle.GreateConnect();

    }
    OracleCommand com = connect.CreateCommand();
    com.CommandType = CommandType.Text;
    com.CommandText ="insert into aaatest(a,b,c,d,e) values(:a ,:b , :c , :d ,:e  )"; //请替换OracleDbType.Varchar2参数
    OracleParameter param1 = com.Parameters.Add(":a",  OracleDbType.Varchar2  ,ParameterDirection.Input);
    param1.Value = p_DS.AAATEST[0].A; OracleParameter param2 = com.Parameters.Add(":b",  OracleDbType.Decimal    ,ParameterDirection.Input);
    param2.Value = p_DS.AAATEST[0].B; OracleParameter paramData = com.Parameters.Add(":c",  OracleDbType.Date  ,ParameterDirection.Input);
    paramData.Value =  p_DS.AAATEST[0].C; OracleParameter paramD = com.Parameters.Add(":d",  OracleDbType.Clob  ,ParameterDirection.Input);
    paramD.Value =  p_DS.AAATEST[0].D; OracleParameter param5 = com.Parameters.Add(":e",  OracleDbType.Blob  ,ParameterDirection.Input);
    param5.Value = p_DS.AAATEST[0].E;
    if(pConnect == null)
    {
    connect.Open();
    }
    int updateCountRow = com.ExecuteNonQuery();
    if(pConnect != null)
    {
    connect.Close();
    }
    return updateCountRow;
    } /// <summary>
    /// 更新
    /// </summary>
    /// <returns>影响记录数量</returns>
    public int Update( DataAAATest p_DS ,string pOperateUserID , bool pIsTimestamp ,OracleConnection pConnect )
    {
    OracleConnection connect = pConnect;
    if(connect  == null )
    {
    connect = ConfigOracle.GreateConnect();

    }
    OracleCommand com = connect.CreateCommand();
    com.CommandType = CommandType.Text;
    //e=EMPTY_BLOB() 
    com.CommandText ="update    aaatest set  b = :b ,c = :c  where a=:a    ";
    //请替换OracleDbType.Varchar2参数
    OracleParameter parama = com.Parameters.Add(":a",  OracleDbType.Varchar2  ,ParameterDirection.Input);
    parama.Value = p_DS.AAATEST[0].A;
    //
    OracleParameter paramb = com.Parameters.Add(":b",  OracleDbType.Decimal     ,ParameterDirection.Input );
    paramb.Value =212.1M ;
    OracleParameter paramC = com.Parameters.Add(":c",  OracleDbType.Date    ,ParameterDirection.Input);
    paramC.Value = DateTime.Now;         param5.Value = p_DS.AAATEST[0].E;
    if(pConnect == null)
    {
    connect.Open();
    }
    int updateCountRow = com.ExecuteNonQuery();
    if(pConnect != null)
    {
    connect.Close();
    }

    return updateCountRow; }
      

  3.   

    public  int  Update(  DataAAATest  p_DS  ,string  pOperateUserID  ,  bool  pIsTimestamp  ,OracleConnection  pConnect  )  //这个方法错了