插入速度太慢,代码能否优化
try
{
sd.openDatabase();
                ///得到查询结果
DataSet dsWaitS = sd.GetData("Select * from GW_QMobile","GW_QMobile");
                ///生成随机数组
int[] random = ZHJsys.BuildRandom.GetRandomArray(dsWaitS.Tables[0].Rows.Count + 1000,0,int.MaxValue); StringBuilder sql = new StringBuilder(144);
this.pbgState.Maximum = dsWaitS.Tables[0].Rows.Count;
for( int i = 0 ;i < dsWaitS.Tables[0].Rows.Count ;i++ )
{
///插入记录
sql.Append(@"insert GW_QWaitMobile(RandomNum,Mobile) values(");
sql.Append(random[i]);
sql.Append(",'");
sql.Append(dsWaitS.Tables[0].Rows[i]["QMobile"].ToString());
sql.Append("')"); sd.exeOrder(sql.ToString());
Thread.Sleep(25);       ///由于数据量大每条记录插入后,阻塞25毫妙
sql.Remove(0,sql.Length); this.pbgState.PerformStep();
}
}
catch(Exception ex)
{
this.Text = ex.Message;
}
finally
{
sd.closeDatabase();
}

解决方案 »

  1.   

    先在表里addnew,然后用数据集去更新;
      

  2.   

    using System;
    using System.Data;
    using System.Data.SqlClient;namespace SQLDATA
    {
    /// <summary>
    /// ClassZoneSQL 的摘要说明。
    /// </summary>
    public class ClassZoneSQL
    {
    //private ConnString myConnString;
    static System.Data.SqlClient.SqlConnection cn;
    private System.Data.SqlClient.SqlDataAdapter da;
    public ClassZoneSQL()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    //myConnString=new ConnString();
    cn=new SqlConnection();
    cn.ConnectionString=ConnString.ConnectString;
    da=new SqlDataAdapter();
    //cn.Open();
    }
    public System.Data.DataTable DataList()
    {
    cn.Open();
    da.SelectCommand =CreateSeleteCommand();
    DataTable returnTB=new DataTable();
    da.Fill(returnTB);
    cn.Close();
    returnTB.PrimaryKey =new DataColumn[]{ returnTB.Columns["ZoneID"]};
    return returnTB;
    }
    public int DataEdit(System.Data.DataTable myTB)
    {
    cn.Open();
    // da.UpdateCommand =CreateUpdateCommand();
    // da.InsertCommand =CreateInsertCommand();
    // da.DeleteCommand =CreateDeleteCommand();
    // da.Update(myTB);
    SqlCommand cmdUpdate=CreateUpdateCommand();
    SqlCommand cmdInsert=CreateInsertCommand();
    SqlCommand cmdDelete=CreateDeleteCommand();
    DataViewRowState dvrs;
    dvrs=DataViewRowState.ModifiedCurrent|DataViewRowState.Added|DataViewRowState.Deleted;
    int myretu=0;
    foreach(DataRow row in myTB.Select("","",dvrs))
    {
    switch(row.RowState)
    {
    case DataRowState.Modified:
    myretu=SubmitUpdate(row,cmdUpdate);
    break;
    case DataRowState.Added:
    myretu=SubmitInsert(row,cmdInsert);
    break;
    case DataRowState.Deleted:
    myretu=SubmitDelete(row,cmdDelete);
    break;
    }
    }
    cn.Close();
    return myretu;
    }
    static System.Data.SqlClient.SqlCommand CreateSeleteCommand()
    {
    string strSQL;
    strSQL="SELECT * FROM [Zone] WHERE DelBJ = '0' ";
    System.Data.SqlClient.SqlCommand cmd=new SqlCommand(strSQL,cn);
    return cmd;
    }
    static System.Data.SqlClient.SqlCommand CreateUpdateCommand()
    {
    string strSQL;
    strSQL="UPDATE [Zone] SET ZoneName = @ZoneName_New ,DelBJ = @DelBJ_New WHERE ZoneID=@ZoneID_Orig";
    System.Data.SqlClient.SqlCommand cmd=new SqlCommand(strSQL,cn);
    System.Data.SqlClient.SqlParameterCollection pc=cmd.Parameters;
    pc.Add("@ZoneName_New",System.Data.SqlDbType.VarChar,20);
    pc.Add("@DelBJ_New",System.Data.SqlDbType.Bit,1);
    System.Data.SqlClient.SqlParameter param;
    param=pc.Add("@ZoneID_Orig",System.Data.SqlDbType.Decimal,9);
    param.SourceVersion=DataRowVersion.Original;
    return cmd;
    }
    static System.Data.SqlClient.SqlCommand CreateInsertCommand()
    {
    string strSQL;

    strSQL="INSERT INTO [Zone] (ZoneName) VALUES ( @ZoneName_New)";
    System.Data.SqlClient.SqlCommand cmd=new SqlCommand(strSQL,cn);
    System.Data.SqlClient.SqlParameterCollection pc=cmd.Parameters;
    pc.Add("@ZoneName_New",System.Data.SqlDbType.VarChar,20);
    return cmd;
    }
    static System.Data.SqlClient.SqlCommand CreateDeleteCommand()
    {
    string strSQL;
    strSQL="DELETE FROM [Zone] WHERE ZoneID =@ZoneID_Orig";
    System.Data.SqlClient.SqlCommand cmd=new SqlCommand(strSQL,cn);
    System.Data.SqlClient.SqlParameterCollection pc=cmd.Parameters;
    System.Data.SqlClient.SqlParameter param;
    param=pc.Add("@ZoneID_Orig",System.Data.SqlDbType.Decimal,9);
    param.SourceVersion=DataRowVersion.Original;
    return cmd;
    }
    static int SubmitUpdate(DataRow row,SqlCommand cmd)
    {
    SqlParameterCollection pc=cmd.Parameters;
    pc["@ZoneName_New"].Value =row["ZoneName"].ToString();
    pc["@DelBJ_New"].Value =System.Convert.ToBoolean(row["DelBJ"]);
    pc["@ZoneID_Orig"].Value =System.Convert.ToDecimal(row["ZoneID",DataRowVersion.Original]);
    try
    {
    return cmd.ExecuteNonQuery();
    }
    catch
    {
    return 0;
    }
    }
    static int SubmitInsert(DataRow row,SqlCommand cmd)
    {
    SqlParameterCollection pc=cmd.Parameters;
    pc["@ZoneName_New"].Value =row["ZoneName"].ToString();
    try
    {
    return cmd.ExecuteNonQuery();
    }
    catch
    {
    return 0;
    }
    }
    static int SubmitDelete(DataRow row,SqlCommand cmd)
    {
    SqlParameterCollection pc=cmd.Parameters;
    pc["@ZoneID_Orig"].Value =System.Convert.ToDecimal(row["ZoneID",DataRowVersion.Original]);
    try
    {
    return cmd.ExecuteNonQuery();
    }
    catch
    {
    return 0;
    }
    }
    }
    }