一个很简单的操作,就是对一个表进行insert操作,一天估计有100万以下.在70万左右吧.我用的一个sql语句:sql = "insert into table (id,name,,....) value (1,'dd',...)";这样,然后
 OracleConnection oc = new OracleConnection(constring);                oc.Open();
                OracleCommand ocom = new OracleCommand(sql, oc);
                returnvalue = ocom.ExecuteNonQuery();
                oc.Close();
                oc.Dispose();这样子.然后不是还有一种这样利用写成参数形式的吗
  OracleConnection con = new OracleConnection(constring);
                con.Open();                    OracleCommand cmd = new OracleCommand(sql, con);
                    cmd.CommandType = CommandType.Text;
                    OracleParameter p1 = new OracleParameter("id", OracleType.VarChar);
                    p1.Direction = System.Data.ParameterDirection.Input;
                    p1.Value = productid;
                    cmd.Parameters.Add(p1);                    ......
                    ........                    returnvalue = cmd.ExecuteNonQuery();
con.Close(); con.Dispose();我个人觉得第一种代码少,写的方便,第二种估计看的时候好看.但不太清楚在ORACle中执行时,会不会速度差别大,就是一个insert
这两种在ORACLE中执行有什么区别?那种速度快?

解决方案 »

  1.   

    第二种速度要快点。你上面的那种方法如果没有过滤特殊字符串的话,是很容易造成SQL注入的。而第二种方法,相对于第一种方法来说更安全些。同时执行效率也高些。建议你使用windows自带的性能监视器测试下!
    还有,为什么你写OracleConnection不喜欢用using呢?
      

  2.   

    同样是insert语句,在速度上没有什么差别,一样的;
    在我看来第一句看上去会快速理解!
      

  3.   

    楼上
    我们这儿有一个人说,在oracle中第一句,它执行时,每次都要重新编译,而第二种不用,所以会快,我没看出来.对oracle编译原理不太清楚,有这可能吗?
      

  4.   

    第二种更快些。最好是批量提交,即每插入3000条左右commit一次。
    它快的原因,在于只解析一次,以后每次都不用解析。
    而第一种方案,Oracle每次都得对sql语句进行再解析。这是需要时间的。同时,如上所述,存在着SQL注入的风险。
      

  5.   

    对于oracle而言,第一种方式中传入的sql文每次是不同的,所以需要重新对sql文作处理。
    所以可能第二种方式会稍微好一些。这就是所谓绑定于不绑定的差别所在。
    不过oracle还提供了批绑定的方式:bulk binds。
    这个应该是最快的方法了。
      

  6.   

    Oracle不要对每个执行语句,进行硬解析等步骤,节省时间,效率更高!
      

  7.   

    第一种是最差的,每次都要解析SQL语句.