本帖最后由 jiangsheng 于 2010-04-29 03:55:53 编辑

解决方案 »

  1.   

    去掉@,如:
    SqlParameter projectnumberparameter = new SqlParameter("ProjectID", SqlDbType.UniqueIdentifier, 32);还有:
    oc.Parameters.Add(projectnumberparameter);
    oc.CommandType = CommandType.StoredProcedure;
      foreach (string procedure in al)
      {
      oc.CommandText = procedure;
      i = oc.ExecuteNonQuery();
      if (i < 0)
         tran.Rollback();
      else
         tran.Commit();  }
      catch
      {
         i = -1;
         tran.Rollback();
      }
      

  2.   

    因为你都是一个参数,那就只用加一次参数就可以了。
    oc.Parameters.Add(projectnumberparameter);
    oc.CommandType = CommandType.StoredProcedure;
    放在for的外面,而不是里面。
    还有你的if少了else ,应该是:
    if (i < 0)
      tran.Rollback();
      else
      tran.Commit();
      

  3.   

    谢谢楼上的回答,问题不在这,问题是SqlParameter projectnumberparameter = new SqlParameter("@ProjectID", SqlDbType.UniqueIdentifier, 32);
    应该改成OleDbParameter projectnumberparameter = new OleDbParameter("@ProjectID", System.Data.OleDb.OleDbType.Guid, 32);
    因为oledbcommand不能接收SqlDbType的值,只能是oledbtype的值  
      

  4.   

    调试: 1. catch 一下,显示出具体错误.  2.跟踪状态值