小山博客贴:
http://singlepine.cnblogs.com/articles/255374.html?Pending=true#Post//--------------------------------------------------------------     
        GetDataSet#region GetDataSet
        public static DataSet GetDataSet(string sql)
        {
            SqlDataAdapter    sda =new SqlDataAdapter(sql,ConnectionString);
            DataSet ds=new DataSet();
            sda.Fill(ds);
            return ds;
        }
        #endregion
//--------------------------------------------------------------     
 Insert#region Insert
        private void InsertUserInfo()
        {
            DataTable dt=ds.Tables[0];
            dt.TableName="UserInfo";
            DataRow dr=dt.NewRow();
            dr["LoginName"]=this.txtUserName.Value;
            dr["Pass"]=this.txtPassword.Value;
            dr["NickName"]=this.txtNickName.Value;
            dr["UserType"]=1;
            dr["IsActive"]=false;
            dr["RegisterDate"]=System.DateTime.Now;
            dt.Rows.Add(dr);
            dt.AcceptChanges();
            DataHelper.InsertTable(dt,dt.TableName);
            //这儿的两个参数?是否传到下面的(2)?
        }
        #endregion
  //--------------------------------------------------------------  
        InsertTable#region InsertTable
        //用于主键是数据库表名+ID类型的(1)
        public static void InsertTable(DataTable dt)
        {
            string TableName="["+dt.TableName+"]";
            string KeyName=dt.TableName+"ID";
            foreach(DataRow dr in dt.Rows)
            {
                insertRow(dr,TableName,KeyName);
            }
        }
        //用于主键是任意类型的(2)
        public static void InsertTable(DataTable dt,string KeyName)
       //这儿的KeyName是上面传下来的表名的吗????这儿搞乱我了,不知是关键字还是表名
        {
            string TableName="["+dt.TableName+"]";
            foreach(DataRow dr in dt.Rows)
            {
                insertRow(dr,TableName,KeyName);//这儿又是表名,关键字?
            }
        }
        #endregion        //--------------------------下面看不明,希望大家给点注释---------------------------
        insertRow#region insertRow
        private static void  insertRow(DataRow dr,string TableName,string KeyName)
        {
            string InsertSql = "Insert into {0}({1}) values({2})";
            SqlCommand sqlcom=new SqlCommand();
            DataTable dtb=dr.Table ;
            StringBuilder insertValues    = new StringBuilder();
            StringBuilder cloumn_list    = new StringBuilder();
            for (int k=0; k<dr.Table.Columns.Count; ++k)
            {
                //just for genentae,
                if (dtb.Columns[k].ColumnName==KeyName) continue;
                System.Data.IDataParameter iparam=new  SqlParameter();
                iparam.ParameterName    = "@"+ dtb.Columns[k].ColumnName;
                iparam.DbType            = GetDbType(dtb.Columns[k].DataType);
                iparam.Value            = dr[k];
                sqlcom.Parameters .Add(iparam);                cloumn_list.Append(dtb.Columns[k].ColumnName);
                insertValues.Append("@"+dtb.Columns[k].ColumnName);                cloumn_list.Append(",");
                insertValues.Append(",");
            }
            
            string cols=cloumn_list.ToString();
            cols=cols.Substring(0,cols.Length -1);            string values=insertValues.ToString();
            values=values.Substring(0,values.Length -1);
            
            string sql = string.Format(InsertSql, TableName,cols ,values);
            sqlcom.CommandText =sql;    
            try
            {
                ExecCommand(sqlcom);
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
        #endregion

解决方案 »

  1.   

    代码较长,感觉应该没什么难度,自己查一下相关的内容吧,就是SQL语句,字符串替换,好像还是ADO的命令参数设置,MSDN上都有现成的答案吧
      

  2.   

    就是写一个共用的插入,删除,修改.到时只要调用就行.给下面加一些注释就好.       insertRow#region insertRow
            private static void  insertRow(DataRow dr,string TableName,string KeyName)
            {
                string InsertSql = "Insert into {0}({1}) values({2})";
                SqlCommand sqlcom=new SqlCommand();
                DataTable dtb=dr.Table ;
                StringBuilder insertValues    = new StringBuilder();
                StringBuilder cloumn_list    = new StringBuilder();
                for (int k=0; k<dr.Table.Columns.Count; ++k)
                {
                    //just for genentae,
                    if (dtb.Columns[k].ColumnName==KeyName) continue;
                    System.Data.IDataParameter iparam=new  SqlParameter();
                    iparam.ParameterName    = "@"+ dtb.Columns[k].ColumnName;
                    iparam.DbType            = GetDbType(dtb.Columns[k].DataType);
                    iparam.Value            = dr[k];
                    sqlcom.Parameters .Add(iparam);                cloumn_list.Append(dtb.Columns[k].ColumnName);
                    insertValues.Append("@"+dtb.Columns[k].ColumnName);                cloumn_list.Append(",");
                    insertValues.Append(",");
                }
                
                string cols=cloumn_list.ToString();
                cols=cols.Substring(0,cols.Length -1);            string values=insertValues.ToString();
                values=values.Substring(0,values.Length -1);
                
                string sql = string.Format(InsertSql, TableName,cols ,values);
                sqlcom.CommandText =sql;    
                try
                {
                    ExecCommand(sqlcom);
                }
                catch(Exception ex)
                {
                    throw ex;
                }
            }
            #endregion
      

  3.   

    大概解释下
    public static DataSet GetDataSet(string sql)
    {
            //这个方法是传入sql语句,返回dataset
    }
    private void InsertUserInfo()
    {
            DataTable dt=ds.Tables[0];
            DataHelper.InsertTable(dt,dt.TableName);
            //这是测试代码,实际用的时候调用方法InsertTable,传入datatable,和datatable主键名字就可以了,是我写错了,写成dt.TableName,更正
    }
    //用于主键是数据库表名+ID类型的(1),就是数据库结构是这样的,数据表叫user,主渐id叫userid
    public static void InsertTable(DataTable dt)
    {
                string TableName="["+dt.TableName+"]";
                string KeyName=dt.TableName+"ID";
                foreach(DataRow dr in dt.Rows)
                {
                    insertRow(dr,TableName,KeyName);
                }
    }
     //用于主键是任意类型的(2)
    public static void InsertTable(DataTable dt,string KeyName)//这儿的KeyName是表关键字
    {
                string TableName="["+dt.TableName+"]";
                foreach(DataRow dr in dt.Rows)
                {
                    insertRow(dr,TableName,KeyName);//TableName是表名,KeyName是关键字
                }
    }
    private static void  insertRow(DataRow dr,string TableName,string KeyName)
    {
        //主要功能是通过传入的datatalbe来构造sql语句,包括sql的字段和字段值,然后用string.Format方法赋值,构造出一个带参数的sql语句,然后存入数据库
    }blog因为时间原因没有给出注释表示抱歉,以后我会抽空完善和补上注释