using System;
using System.Data;
using System.Data.SqlClient; public static void FullNullRows(DataSet ds,int count)
{
//
int begin = 0; if (ds.Tables[0].Rows.Count == 0)
{
//
for (int i=0;i<10;i++)
{
//
DataRow myRow;
myRow = ds.Tables[0].NewRow();
// Then add the new row to the collection.
for (int j=0;j<ds.Tables[0].Columns.Count;j++)
{
myRow[j] = DBNull.Value;
} ds.Tables[0].Rows.Add(myRow); }
}
else
{
Math.DivRem(ds.Tables[0].Rows.Count,count,out begin); if (begin!=0)
for (int i=begin;i<10;i++)
{
//
DataRow myRow;
myRow = ds.Tables[0].NewRow();
// Then add the new row to the collection.
for (int j=0;j<ds.Tables[0].Columns.Count;j++)
{
myRow[j] = DBNull.Value;
} ds.Tables[0].Rows.Add(myRow); }
}
}

解决方案 »

  1.   

    public void SendListEx(DataSet clientDataSet,string listname)
    {
    OleDbConnection listConn=new OleDbConnection("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=list;Data Source=(local);Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=SHAKA;Use Encryption for Data=False;Tag with column collation when possible=False");

    OleDbDataAdapter listDA=new OleDbDataAdapter();

    //INSERT
    listDA.InsertCommand=new OleDbCommand("INSERT INTO "+listname+"(ID,NAME,SIZE,UNIT,NUMBER,REQUEST,DESCRIPTION) VALUES(@id,@name,@size,@unit,@number,@request,@description)",listConn);
    OleDbParameter para=listDA.InsertCommand.Parameters.Add("@id",SqlDbType.Int);
    para.SourceColumn="ID";
    para=listDA.InsertCommand.Parameters.Add("@name",SqlDbType.Char);
    para.SourceColumn="NAME";
    para=listDA.InsertCommand.Parameters.Add("@size",SqlDbType.Char);
    para.SourceColumn="SIZE";
    para=listDA.InsertCommand.Parameters.Add("@unit",SqlDbType.Char);
    para.SourceColumn="UNIT";
    para=listDA.InsertCommand.Parameters.Add("@number",SqlDbType.Int);
    para.SourceColumn="NUMBER";
    para=listDA.InsertCommand.Parameters.Add("@request",SqlDbType.Char);
    para.SourceColumn="REQUEST";
    para=listDA.InsertCommand.Parameters.Add("@description",SqlDbType.Char);
    para.SourceColumn="DESCRIPTION"; //DELETE
    listDA.DeleteCommand=new OleDbCommand("DELETE FROM "+listname+" WHERE ID=@id",listConn);
    para=listDA.DeleteCommand.Parameters.Add("@id",SqlDbType.Int);
    para.SourceColumn="ID";
    para.SourceVersion=DataRowVersion.Original;
    //UPDATE
    listDA.UpdateCommand=new OleDbCommand("UPDATE "+listname+" SET (NAME=@name,SIZE=@size,UNIT=@unit,NUMBER=@number,REGUEST=@reguest,DESCRIPTION=@description) WHERE ID=@id",listConn);
    para=listDA.UpdateCommand.Parameters.Add("@id",SqlDbType.Int);
    para.SourceColumn="ID";
    para.SourceVersion=DataRowVersion.Original;
    para=listDA.DeleteCommand.Parameters.Add("@name",SqlDbType.Char);
    para.SourceColumn="NAME";
    para=listDA.DeleteCommand.Parameters.Add("@size",SqlDbType.Char);
    para.SourceColumn="SIZE";
    para=listDA.DeleteCommand.Parameters.Add("@unit",SqlDbType.Char);
    para.SourceColumn="UNIT";
    para=listDA.DeleteCommand.Parameters.Add("@number",SqlDbType.Int);
    para.SourceColumn="NUMBER";
    para=listDA.DeleteCommand.Parameters.Add("@request",SqlDbType.Char);
    para.SourceColumn="REQUEST";
    para=listDA.DeleteCommand.Parameters.Add("@description",SqlDbType.Char);
    para.SourceColumn="DESCRIPTION";

    listDA.Update(clientDataSet,listname);
    }
      

  2.   

    微软的网上书店的例子和 DataAccess Block 都是很好的例子 可以参考一下
      

  3.   

    to  lemong(風之影) 我的意思是dataset 在该涵数外设置好,在涵数中做往数据库更新的操作,
      

  4.   

    to  istring() 你的那个好象于传入的dataset 没有什么关系吧,
      

  5.   

    DataSet的更新必须与生成它的DataAdapter相关联,所以你的函数必须有两个参数,DataSet和DataAdapter。
    private void UpData(DataSet sDs,SqlDataAdapter sDa)
    {
    //......
    sDa.Update(sDs); 
    }
      

  6.   

    对dataset 的各个表,进行实时的添加、修改、删除操作,看看msdn就可以了。
      

  7.   

    从楼主的目的来看,完全不用传递dataset,用引用就可以了。
    你将dataset标识为public
    然后在需要更新dataset的那个类里面用xxx.ds(比如你的dataset的名字就叫ds)当然,还有一个方法,就是你要求的传输dataset
    在两个地方都建造一个dataset。然后在处理dataset的地方处理,返回一个dataset就是了,给一个sample
    public DataSet sample(DataSet ds)
    {
         this.SqlDataAdp.Fill(ds);     return ds;
    }调用处:……
    DataSet ds = new DataSet();
    ……
    ……
    ds = xxx.sample(ds);
      

  8.   

    使用DataAdapter的Update方法就可以将DataSet更新到数据库,但这需要提前定义好DataAdapter的4个Command属性InsertCommand,UpdateCommand,DeleteCommand,SelectCommand。
    而实际上DataAdapter的Update就是根据这4个Command来更新DataSet的。
    所以,你的工作主要就是为DataAdapter设置Command属性,这主要有2中方法:
    1.自动生成:
      使用CommandBuilder
      MS的例子:ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDataSqlClientSqlCommandBuilderClassTopic.htm  SqlConnection myConn = new SqlConnection(myConnection);
       SqlDataAdapter myDataAdapter = new SqlDataAdapter();
       myDataAdapter.SelectCommand = new SqlCommand(mySelectQuery, myConn);
       SqlCommandBuilder cb = new SqlCommandBuilder(myDataAdapter);   使用CommandBuilder的几个条件:
       (1)需要一个Select语句(或命令),
       (2)数据表中有pk
       (3)一个CommandBuilder只能为一个DataAdapter服务,即,对应的只是一张表2.手工配置:
      参考istring() 的代码就可以。  使用CommandBuilder生成的存储过程是非常完善,非常严谨的,但这也使效率有所降低,尤其是在批量添加数据时。很多时候我们并不需要那样,所以,如果你对数据库有足够的了解的话(不了解的话可以去向DBA请教),非常建议你自己写存储过程。不过这时你需要小心出来并发性的问题,就像istring()写的//DELETE
    listDA.DeleteCommand=new OleDbCommand("DELETE FROM "+listname+" WHERE ID=@id",listConn);
    para=listDA.DeleteCommand.Parameters.Add("@id",SqlDbType.Int);
    para.SourceColumn="ID";
    para.SourceVersion=DataRowVersion.Original;   <<==这里,使用主键的原始版
      

  9.   

    非常谢谢大家,我现在倾向于用istring() 的那种方法,但有两点不明白,
    <一>.para.sourceColumn="ID";
         这句什么意思,
    <二>.是不是dataset 有几张表就的相应的建立几个dataApdater,然后生成各自的各种    command 啊<三>. CMIC(大象) 说必须的有dataadapter参数,我觉得如果没有这个参数也可以的,
         请大家指教.
      

  10.   

    > <一>.para.sourceColumn="ID";
    >     这句什么意思,
    指定该参数对应的DataTable中的列的名称> <二>.是不是dataset 有几张表就的相应的建立几个dataApdater,然后生成各自的各种    > command 啊
      

  11.   

    从楼主的目的来看,完全不用传递dataset,用引用就可以了。
    你将dataset标识为public
    然后在需要更新dataset的那个类里面用xxx.ds(比如你的dataset的名字就叫ds)当然,还有一个方法,就是你要求的传输dataset
    在两个地方都建造一个dataset。然后在处理dataset的地方处理,返回一个dataset就是了,给一个sample
    public DataSet sample(DataSet ds)
    {return ds}
    其实还可以这样传递引用!
    public void sample(out DataSet ds)
    {}
    或者这样
    public DataSet sample(ref DataSet ds)
    {}其实都是可以的!