string sql = @"Update TestTb Set TbName = :TbName,TbContent =:TbContent where TbId = :TbId";
 OracleCommand cm = new OracleCommand(sql, new OracleConnection(this.Connection.ConnectionString));
 cm.Connection.Open();
            cm.Parameters.Add("TbName", OracleType.VarChar).Value = model.TbName;
            cm.Parameters.Add("TbContent ", OracleType.Clob).Value = model.TbContent ;
            cm.Parameters.Add("TbId ", OracleType.Number).Value = model.TbId ;
try
{
 cm.ExecuteNonQuery();
}
catch
{
}
TbContent 在数据库里的类型为Clob  如果我用OracleType.Clob 的话会出错。
用户代码未处理 System.Data.OracleClient.OracleException
  Message="ORA-01084: OCI 调用中的参数无效"
  Source="System.Data.OracleClient"
  ErrorCode=-2146232008
  Code=1084

而改成 OracleType.VarChar 的话就没有问题。
 

解决方案 »

  1.   

    OracleParameter _parameter = new OracleParameter("TbContent", OracleType.Clob);
                _parameter.Value = model.TbContent;
                cm.Parameters.Add(_parameter);
    我用行
      

  2.   

    clob的意思是大字符对象(Character Large Object),也就是说clob归根揭底还是字符类型,如果楼主用OracleType.VarChar行的话,那就将就着用吧,从网上看也有其他人出现这个问题的
      

  3.   

    new OracleConnection(this.Connection.ConnectionString) 这个返回类型跟定义的类型是否一样?
      

  4.   

    而改成 OracleType.VarChar 的话就没有问题。 问题不在这儿看看你的数据库类型是什么.
      

  5.   

    问题发现了好像是 model.TbContent = "" 的话,就会出现错误。而用VarChar 的话 即便model.TbContent = ""  也是没问题的?为什么 Clob 不能插入""?
      

  6.   

    OracleParameter _parameter = new OracleParameter("TbContent", OracleType.Clob, model.TbContent.Length, ParameterDirection.Input, False, 0, 0, "", DataRowVersion.Default, model.TbContent);