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); }
}
}
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); }
}
}
{
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);
}
private void UpData(DataSet sDs,SqlDataAdapter sDa)
{
//......
sDa.Update(sDs);
}
你将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);
而实际上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; <<==这里,使用主键的原始版
<一>.para.sourceColumn="ID";
这句什么意思,
<二>.是不是dataset 有几张表就的相应的建立几个dataApdater,然后生成各自的各种 command 啊<三>. CMIC(大象) 说必须的有dataadapter参数,我觉得如果没有这个参数也可以的,
请大家指教.
> 这句什么意思,
指定该参数对应的DataTable中的列的名称> <二>.是不是dataset 有几张表就的相应的建立几个dataApdater,然后生成各自的各种 > command 啊
对
你将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)
{}其实都是可以的!