由于需要更新的表,数据量很大,通常是几百万条,我先取得该表的空记录DataSet,然后增加记录到dsUpdate.Tables[0],之后用sda.MissingSchemaAction = MissingSchemaAction.AddWithKey;
sda.Update(dsUpdate.Tables[0]);
dsUpdate.AcceptChanges();
进行更新到服务器,但每次更新到服务器之前,我必须先按主键删除已经存在的记录,然后才能更新,而删除操作也是特别费时,特别是没有记录的时候,各位高手,可有比较好的方法?
sda.Update(dsUpdate.Tables[0]);
dsUpdate.AcceptChanges();
进行更新到服务器,但每次更新到服务器之前,我必须先按主键删除已经存在的记录,然后才能更新,而删除操作也是特别费时,特别是没有记录的时候,各位高手,可有比较好的方法?
解决方案 »
- 请问MVVM模式
- A,B,C三个表,一共1000条数据,如何让其随机选择60条(平均分配A,B,C三表的数据)放在datagridview中
- 获取数据库的字段的问题
- 用C#实现一个插件架构的系统
- 如何判断我当前的网络是否和五联网联通呢?
- 如何将arrayList中的数据全部清除啊?
- 请问如何用listbox的Tag绑定数据?
- 接口中能不能定义:实现接口的类的,必须有一个带int参数的实例化方法
- vb.net中的paitform和c#中的onpait不等价????
- vs.net 的工具栏怎样实现,要继承toolbar对吗?可怎么分栏,.net好象没有coolbar
- C#+MySql连接求助
- winform中如何获取DataGrid中当前行的内容??
把UpdateCommand,InsertCommand写好就行了
不使用存储过程,可以这么写:InsertCommandvoid bool InsertData(DataSet ds)
{
String sqlStr;
sqlStr="insert into myTable(CategoryName,ParentID,HasChild,Description) values (@CategoryName,@ParentID,@HasChild,@Description);select @PkID=@@identity";
theInsertCommand = new SqlCommand(sqlStr,new SqlConnection(ConstructionConfiguration.ConnectionString));
SqlParameterCollection sqlParams = theInsertCommand.Parameters;
sqlParams.Add(new SqlParameter( "@PkID",SqlDbType.Int));
sqlParams.Add(new SqlParameter( "@CategoryName",SqlDbType.Char,50));
sqlParams.Add(new SqlParameter( "@ParentID",SqlDbType.Int));
sqlParams.Add(new SqlParameter( "@HasChild",SqlDbType.Char));
sqlParams.Add(new SqlParameter( "@Description",SqlDbType.Char));
//
// Define the parameter mappings from the data table in the/
// dataset.
//
sqlParams["@PkID"].SourceColumn=GoodsCategoryData.PKID_FIELD;
sqlParams["@PkID"].Direction=ParameterDirection.Output;
sqlParams["@CategoryName"].SourceColumn=GoodsCategoryData.CATEGORYNAME_FIELD;
sqlParams["@ParentID"].SourceColumn=GoodsCategoryData.PARENTID_FIELD;
sqlParams["@HasChild"].SourceColumn=GoodsCategoryData.HASCHILD_FIELD;
sqlParams["@Description"].SourceColumn=GoodsCategoryData.DESCRIPTION_FIELD;
SqlDataAdapter dsCommand;
dsCommand.InsertCommand=theInsertCommand;
dsCommand.Update(data,"MyTable"); //注意这个MyTable}
{
String sqlStr;
sqlStr="insert into myTable(CategoryName,ParentID,HasChild,Description) values (@CategoryName,@ParentID,@HasChild,@Description);select @PkID=@@identity";
theInsertCommand = new SqlCommand(sqlStr,new SqlConnection(ConstructionConfiguration.ConnectionString));
SqlParameterCollection sqlParams = theInsertCommand.Parameters;
sqlParams.Add(new SqlParameter( "@PkID",SqlDbType.Int));
sqlParams.Add(new SqlParameter( "@CategoryName",SqlDbType.Char,50));
sqlParams.Add(new SqlParameter( "@ParentID",SqlDbType.Int));
sqlParams.Add(new SqlParameter( "@HasChild",SqlDbType.Char));
sqlParams.Add(new SqlParameter( "@Description",SqlDbType.Char));
sqlParams["@PkID"].SourceColumn=GoodsCategoryData.PKID_FIELD;
sqlParams["@PkID"].Direction=ParameterDirection.Output;
sqlParams["@CategoryName"].SourceColumn=GoodsCategoryData.CATEGORYNAME_FIELD;
sqlParams["@ParentID"].SourceColumn=GoodsCategoryData.PARENTID_FIELD;
sqlParams["@HasChild"].SourceColumn=GoodsCategoryData.HASCHILD_FIELD;
sqlParams["@Description"].SourceColumn=GoodsCategoryData.DESCRIPTION_FIELD;
SqlDataAdapter dsCommand;
dsCommand.InsertCommand=theInsertCommand;
dsCommand.Update(data,"MyTable"); //注意这个MyTable
if ( data.HasErrors )
{
data.Tables[GoodsCategoryData.TABLE_NAME].GetErrors()[0].ClearErrors();
return false;
}
else
{
data.AcceptChanges();
return true;
}}
{
String sqlStr;
sqlStr="insert into myTable(CategoryName,ParentID,HasChild,Description) values (@CategoryName,@ParentID,@HasChild,@Description);select @PkID=@@identity";
theInsertCommand = new SqlCommand(sqlStr,new SqlConnection(ConstructionConfiguration.ConnectionString));
SqlParameterCollection sqlParams = theInsertCommand.Parameters;
sqlParams.Add(new SqlParameter( "@PkID",SqlDbType.Int));
sqlParams.Add(new SqlParameter( "@CategoryName",SqlDbType.Char,50));
sqlParams.Add(new SqlParameter( "@ParentID",SqlDbType.Int));
sqlParams.Add(new SqlParameter( "@HasChild",SqlDbType.Char));
sqlParams.Add(new SqlParameter( "@Description",SqlDbType.Char));
sqlParams["@PkID"].SourceColumn=GoodsCategoryData.PKID_FIELD;
sqlParams["@PkID"].Direction=ParameterDirection.Output;
sqlParams["@CategoryName"].SourceColumn=GoodsCategoryData.CATEGORYNAME_FIELD;
sqlParams["@ParentID"].SourceColumn=GoodsCategoryData.PARENTID_FIELD;
sqlParams["@HasChild"].SourceColumn=GoodsCategoryData.HASCHILD_FIELD;
sqlParams["@Description"].SourceColumn=GoodsCategoryData.DESCRIPTION_FIELD;
SqlDataAdapter dsCommand;
dsCommand = new SqlDataAdapter();
dsCommand.SelectCommand = new SqlCommand();
dsCommand.SelectCommand.Connection = new SqlConnection("数据库联接串");
dsCommand.InsertCommand=theInsertCommand;
dsCommand.Update(data,"MyTable"); //注意这个MyTable
if ( data.HasErrors )
{
data.Tables[GoodsCategoryData.TABLE_NAME].GetErrors()[0].ClearErrors();
return false;
}
else
{
data.AcceptChanges();
return true;
}}
更新前不用先删除数据记录!因为DataAdapter.Update方法是根据Row.RowState来更新数据的。未修改记录的状态始终是DataRowState.Unchanged删除操作可用:dt.Clear();方法快速清空,然后调用dt.AcceptChanges()方法。
我不可能把总部以前的数据取出来,因为太多了,所以只能先取个空数据表DATASET,这边的我会按条件全部取出来,然后重新添加到总部的空DATASET去,然后再调用DATASET的UPDATE方法,添加到总部,之前要先删除总部原来的数据,不然就会出错。现在比较头疼的,就是删除这一步太慢。DATASET的UPDATE还行。