大致如下:
   protected void IntoData(string logName)
     {
            DataTable dtCADType = new DataTable();   //预备的参数
            dtCADType = ImportWebsiteLog.GetAllCADType();
              ....            while (getString != null)   //循环体开始
            {
                 ......
               cadTypeID = this.GetCADTypeID(cadTypeName, dtCADType);
                 ......             }      }   //循环体中将会用到的方法. 把数据全部取出,放到内存中,不再需要在循环体中每次去查询书了.用DataTable来查
    public long GetCADTypeID(string cadTypeName, DataTable dt)
        {
            long cadTypeID;
            StringBuilder strExpr = new StringBuilder();
            strExpr.AppendFormat("TypeName = '{0}' ", cadTypeName);
            DataRow[] resultRow = dt.Select(CoreUtil.TransToString(strExpr));         //如果查不到,就到表中去添加该字符串的记录
            if (resultRow.Count() == 0)
            {
                
                ImportWebsiteLog.InsertCADType(cadTypeName, DateTime.Now, DateTime.Now, "初始化");
                
            }
            cadTypeID = CoreUtil.TransToLong(resultRow[0][0]);            return cadTypeID;        }
为了避免,在循环体中每次打开数据库连接,每次去查,所以选择了全部查出放到 DataTbale中.
但是,现在增加了需求:
  如果查不到,那么就去对应的维护表中去 Insert一条. 然后得到其ID.那么,现在如何写呢?求助啊~~~~~

解决方案 »

  1.   


      //是否已有此数据
                  bool flag = false;
                    if (判断是否有的条件)
                    {
                        SqlDataReader dr = DBB.RunProcGetReader("caozuo 1,'table,'top 1 id','字段名=''" + dt.Rows[i][1].ToString() + "''',''");
                        while (dr.Read())
                        {
                             flag = True;                    }
                        dr.Close();
                    }
                    else
                    {
                      insertid = DBB.GetIDInsert("insert into table(表字段1,字段2,字段3) values('" + dt.Rows[i][1].ToString() + "','" + dt.Rows[i][2].ToString() + "','" + dt.Rows[i][3].ToString() + "') select @@identity");
                    }
      

  2.   

        public long GetCADTypeID(string cadTypeName, DataTable dt)
            {
                long cadTypeID;
                StringBuilder strExpr = new StringBuilder();
                strExpr.AppendFormat("TypeName = '{0}' ", cadTypeName);            DataRow[] resultRow = dt.Select(CoreUtil.TransToString(strExpr));         //如果查不到,就到表中去添加该字符串的记录
                if (resultRow.Count() == 0)
                {
                    
                    ImportWebsiteLog.InsertCADType(cadTypeName, DateTime.Now, DateTime.Now, "初始化");
                    DataRow[] resultRow = dt.Select(CoreUtil.TransToString(strExpr));
                }
                cadTypeID = CoreUtil.TransToLong(resultRow[0][0]);            return cadTypeID;        }
      

  3.   


    //是否已有此数据
                  bool flag = false;
                    if (判断是否有的条件)
                    {
                        SqlDataReader dr = DBB.RunProcGetReader("caozuo 1,'table,'top 1 id','字段名=''" + dt.Rows[i][1].ToString() + "''',''");//caozuo 1 是一个存储过程,这句就是查询。
                        while (dr.Read())
                        {
                             flag = True;                    }
                        dr.Close();
                    }
                    else
                    {
                      insertid = DBB.GetIDInsert("insert into table(表字段1,字段2,字段3) values('" + dt.Rows[i][1].ToString() + "','" + dt.Rows[i][2].ToString() + "','" + dt.Rows[i][3].ToString() + "') select @@identity");
                    }
      

  4.   


        public long GetCADTypeID(string cadTypeName, DataTable dt)
            {
                long cadTypeID;
                StringBuilder strExpr = new StringBuilder();
                strExpr.AppendFormat("TypeName = '{0}' ", cadTypeName);
                DataRow[] resultRow = dt.Select(CoreUtil.TransToString(strExpr));         //如果查不到,就到表中去添加该字符串的记录
                if (resultRow.Count() == 0)
                {
                    
                    ImportWebsiteLog.InsertCADType(cadTypeName, DateTime.Now, DateTime.Now, "初始化");
                    dt = ImportWebsiteLog.GetAllCADType();
                    return GetCADTypeID(cadTypeName, dt);
                }
                cadTypeID = CoreUtil.TransToLong(resultRow[0][0]);            return cadTypeID;        }
      

  5.   

    这样不行. 在大循环体中,dt 的值并没有改变.现在解决了,用形参  ref 解决public long GetCADTypeID(string cadTypeName,ref DataTable dt)很奇怪,dataTable 本来就是形参,为什么还要加一个 ref 才能修改其dt 参数?