我现在用的是动态生成SQL语句   DataSet ds = new DataSet();
   ds.ReadXml("a.xml");//生成动态inset语句
   StringBuilder builder1 = new StringBuilder("insert into");
   builder1.Append(" ").Append(tableName).Append("(");
   ListViewItem l = new ListViewItem();
   for (int i = 0; i < listView1.Items.Count; i++)
   {
       builder1.Append(listView1.Items[i].SubItems[0].Text).Append(",").Append(" ");                
   }
   builder1.Replace(builder1.ToString(), builder1.ToString().Substring(0, builder1.ToString().Length - 2).ToString());
   builder1.Append(") values (");
   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       StringBuilder builder2 = new StringBuilder();
       for (int i = 0; i < listView1.Items.Count; i++)
       {
           string s = listView1.Items[i].SubItems[1].Text;
           builder2.Append("'").Append(dr[s]).Append("',").Append(" ");
       }
       builder2.Replace(builder2.ToString(), builder2.ToString().Substring(0, builder2.ToString().Length - 2).ToString());
       string insertSQL = builder1.ToString() + builder2.ToString() + ")";
       OracleCommand cmd = new OracleCommand(insertSQL, OracleCon);
       cmd.ExecuteNonQuery();
    }
    ds.Dispose();
由于数据很多,我想提高插入效率,请问怎么改可以批量进行插入啊,如500条插入一次?
或者有更好的方法

解决方案 »

  1.   

    从数据库的表里查询出一个空表放到da.fill(dataTable)里,然后通过循环往表里面加入数据,
    最后用da.Update()更新到表里~~
      

  2.   

    直接创建一个插入方法接收一个DataSet对象public void InsertMessage(DataSet ds)
     {
                SqlCommand cmd = new SqlCommand("insert into Users([name],[sex],[class],[major],[telephone]) values(@name,@sex,@class,@major,@telephone)",cn);
                cmd.Parameters.Add("@name",SqlDbType.NChar,32,"name");
                cmd.Parameters.Add("@sex", SqlDbType.NChar, 2, "sex");
                cmd.Parameters.Add("@class", SqlDbType.NChar, 32, "class");
                cmd.Parameters.Add("@major", SqlDbType.NChar, 16, "major");
                cmd.Parameters.Add("@telephone", SqlDbType.NChar, 32, "telephone");
                da = new SqlDataAdapter();
                da.InsertCommand = cmd;
                cn.Open();
                da.Update(ds,Common.Class1.table_Users);
                cn.Close();
            }
     protected void insertsubmit_Click(object sender, EventArgs e)
           {
               DataAccess.Class1 dac = new DataAccess.Class1();
               DataSet ds = dac.getUsers(Common.Class1.sql_getUser, Common.Class1.table_Users);
               DataRow dr=ds.Tables[0].NewRow();
               dr["name"] = this.TextBox1.Text;
               dr["sex"] = this.DropDownList1.Text;
               dr["class"] = this.TextBox3.Text;
               dr["major"] = this.TextBox4.Text;
               dr["telephone"] = this.TextBox5.Text;
               ds.Tables[0].Rows.Add(dr);
               dac.updataUsersByStoredProcedure(ds);
               BindData();
           }
      

  3.   

    通过List<T>实体类遍历。用数据库操作类sqlhelper等通过事务实现操作
    或构建多个插入语句List<string>,再批插入数据库
      

  4.   


    可是我要插入的是Oracle数据库,这个方法还能用吗?
      

  5.   

    我的数据是直接从xml文件中导入到Dateset中的,他那个方法中的
    DataSet ds = dac.getUsers(Common.Class1.sql_getUser, Common.Class1.table_Users);
    而我这个ds是ds.ReadXml("a.xml")读取的