一次性保存DataSet的方法

来源:互联网 发布:mac appstore无法下载 编辑:程序博客网 时间:2024/06/09 13:39
#region 采用DataSet提交数据     //取得选取语句   private string GetSelectSql(DataSet ds,string strTbName)   {    string strSql="";    DataTable dt;    if (strTbName=="")     {     dt=ds.Tables[0];     strTbName=dt.TableName;    }    else     dt=ds.Tables[strTbName];       foreach(DataColumn dc in dt.Columns )    {     strSql+=dc.ColumnName +",";    }       strSql="Select "+strSql.Substring(0,strSql.Length -1)+" From "+strTbName;    return strSql;   }   //取得更新命令   private SqlCommand GetUpdateCommand(SqlDataAdapter da)   {    string strSql="",strSql1="",strTable="";    SqlCommand cmd1=new SqlCommand();     if(open())    {     SqlCommand cmd=new SqlCommand(da.SelectCommand.CommandText ,conn );      SqlDataReader rdr;     rdr=cmd.ExecuteReader(CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo );     DataTable tb1=rdr.GetSchemaTable();     rdr.Close();     closeConn();     foreach(DataRow row in tb1.Rows )     {           strSql+=row["ColumnName"].ToString() () +",";               if (row["DataType"].ToString ()== "System.Decimal")      // cmd1.Parameters.Add(new SqlParameter("@"+row["ColumnName"].ToString(), (SqlDbType)row["ProviderType"] ,(int) row["ColumnSize"], ParameterDirection.Input, false, ((System.Byte)((int) row["NumericPrecision"])), ((System.Byte)((int) row["NumericScale"])), row["ColumnName"].ToString(), System.Data.DataRowVersion.Current, null));       cmd1.Parameters.Add(new SqlParameter("@"+row["ColumnName"].ToString(), (SqlDbType)row["ProviderType"] ,(int) row["ColumnSize"], ParameterDirection.Input, false, ((System.Byte)(System.Convert.ToInt32(row["NumericPrecision"]))), ((System.Byte)(System.Convert.ToInt32( row["NumericScale"]))), row["ColumnName"].ToString(), System.Data.DataRowVersion.Current, null));      else       cmd1.Parameters.Add(new SqlParameter("@"+row["ColumnName"].ToString(), (SqlDbType)row["ProviderType"] ,(int) row["ColumnSize"] ,row["ColumnName"].ToString()));            strTable=row["BaseTableName"].ToString();       if ((bool) row["isKey"])      {       strSql1+=row["ColumnName"].ToString() +"() +" And ";       cmd1.Parameters.Add(new SqlParameter("@Original_"+row["ColumnName"].ToString(), (SqlDbType)row["ProviderType"] ,(int) row["ColumnSize"] ,row["ColumnName"].ToString()));       }     }         strSql=" Update "+ strTable +" SET " +strSql.Substring(0,strSql.Length -1) +" where " + strSql1.Substring(0,strSql1.Length-4) ;     cmd1.CommandText =strSql;     cmd1.Connection =da.SelectCommand.Connection ;      return cmd1;    }    return null;   }   //取得插入命令   private SqlCommand GetInsertCommand(SqlDataAdapter da)   {    string strSql="",strSql1="",strTable="";    SqlCommand cmd1=new SqlCommand(da.SelectCommand.CommandText );     if(open())    {     SqlCommand cmd=new SqlCommand(da.SelectCommand.CommandText ,conn );      SqlDataReader rdr;     rdr=cmd.ExecuteReader(CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo );     DataTable tb1=rdr.GetSchemaTable();     rdr.Close();     closeConn();      foreach(DataRow row in tb1.Rows )     {           //INSERT INTO temp111(w1, w2, w3, w4, w5, w6) VALUES (@w1, @w2, @w3, @w4, @w5, @w6)" +      strSql+=row["ColumnName"].ToString() +",";          strSql1+="@"+row["ColumnName"].ToString() +",";           if (row["DataType"].ToString ()== "System.Decimal")       //cmd1.Parameters.Add(new SqlParameter("@"+row["ColumnName"].ToString(), (SqlDbType)row["ProviderType"] ,(int) row["ColumnSize"], ParameterDirection.Input, false, ((System.Byte)((int) row["NumericPrecision"])), ((System.Byte)((int) row["NumericScale"])), row["ColumnName"].ToString(), System.Data.DataRowVersion.Current, null));       cmd1.Parameters.Add(new SqlParameter("@"+row["ColumnName"].ToString(), (SqlDbType)row["ProviderType"] ,(int) row["ColumnSize"], ParameterDirection.Input, false, ((System.Byte)(System.Convert.ToInt32(row["NumericPrecision"]))), ((System.Byte)(System.Convert.ToInt32( row["NumericScale"]))), row["ColumnName"].ToString(), System.Data.DataRowVersion.Current, null));      else       cmd1.Parameters.Add(new SqlParameter("@"+row["ColumnName"].ToString(), (SqlDbType)row["ProviderType"] ,(int) row["ColumnSize"] ,row["ColumnName"].ToString()));       strTable=row["BaseTableName"].ToString();      }         strSql=" INSERT INTO "+strTable + "(" + strSql.Substring(0,strSql.Length -1) + ") Values ("+ strSql1.Substring(0,strSql1.Length -1) +")" ;     cmd1.CommandText =strSql;     cmd1.Connection =da.SelectCommand.Connection ;      return cmd1;    }    return null;   }       //取得删除命令   private SqlCommand GetDeleteCommand(SqlDataAdapter da)   {    string strSql="",strTable="";    SqlCommand cmd1=new SqlCommand(da.SelectCommand.CommandText );     if(open())    {     SqlCommand cmd=new SqlCommand(da.SelectCommand.CommandText ,conn );      SqlDataReader rdr;     rdr=cmd.ExecuteReader(CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo );     DataTable tb1=rdr.GetSchemaTable();     rdr.Close();     closeConn();      foreach(DataRow row in tb1.Rows )     {           if ((bool) row["isKey"])      {       strSql+=row["ColumnName"].ToString() +"() +" And ";       cmd1.Parameters.Add(new SqlParameter("@Original_"+row["ColumnName"].ToString(), (SqlDbType)row["ProviderType"] ,(int) row["ColumnSize"] ,row["ColumnName"].ToString()));       }           strTable=row["BaseTableName"].ToString();      }     strSql="DELETE From "+strTable + " where " + strSql.Substring(0,strSql.Length -4) ;     cmd1.CommandText =strSql;     cmd1.Connection =da.SelectCommand.Connection ;      return cmd1;    }    return null;   }   //保存记录集   public bool SaveDataSet(DataSet ds,string strTbName,ref string strErr)   {    bool bi=true;    string strSqlSelect=GetSelectSql(ds,strTbName);    SqlConnection cn=new SqlConnection(connSet );     try    {     SqlDataAdapter da=new SqlDataAdapter(strSqlSelect,cn);      da.UpdateCommand =GetUpdateCommand (da) ;     da.DeleteCommand =GetDeleteCommand(da) ;     da.InsertCommand =GetInsertCommand(da) ;     if (strTbName!="") da.Update(ds,strTbName);      if (strTbName=="") da.Update(ds);     }    catch(Exception e)    {      Log.log(e);      strErr=e.Message ;     bi=false;    }    finally    {     if(cn.State.ToString()=="Open") cn.Close();     cn.Dispose();     }    return bi;   }   ///    /// 不标识名字,取第一个dt,dt必须带名字   ///    public bool SaveDataSet(DataSet ds,ref string strErr)   {    return SaveDataSet(ds,"",ref strErr);   }   #endregion

原创粉丝点击