您的位置:首页 > 其它

关于Dataset批量更新数据的实例方法

2011-03-01 12:37 387 查看
帮同学做个小东西,某局的案件登记表(Excel表)。我同学是专门负责维护该表的,数据量一大就不好查询,而且查询定位不精确,所以该同学就委
托我给他做个小数据库系统。要求,1:能将现有的Excel数据导入数据(想偷懒),2:方便查询。就这么两个功能,我很爽快地答应了。(主要讲Excel导入)于是该同学
就将登记表发给我,打开一看,靠,这么多字段,如果写Sql语句插入或更新的话那还不把我折腾死啊,而且还容易出错。我想了下不能用硬写SQL语句
这种方法,而且还要判断记录是否存在,很烦人。我想了下之前看过关于DataSet批量更新数据的方法,再回顾回顾。研究了一番用DataSet批量更新
数据是可行的,而且也能节约写SQL的时间。在网上搜了一番,都没有能实际解决问题的现成方法,都是有这样或那样的问题,于是我就一边在网上
求救一边看MSDN帮助文档终于解决啦,现将方法分享出来,希望能有所帮助,我会在方法中写上注释的,有不明白的请给我留言。
注:数据库用的是Access。



/// <summary>

/// 更新DataSet数据至数据库中,注意数据表结构必须与Exel结构相同

/// </summary>

/// <param name="ds">ds盛放从Excel表中读取的数据</param>

/// <param name="sql">用于查询数据库记录的语句</param>

/// <returns></returns>

public static bool UpdataDataSet(DataSet ds, string sql)

{

using (OleDbConnection connection = new OleDbConnection(PubConstant.ConnectionString))

{

connection.Open();

DataTable tempDT = new DataTable();

//创建适配器

OleDbDataAdapter dap = new OleDbDataAdapter(sql, connection);

//创建 用于更改与关联数据库的单表命令

OleDbCommandBuilder cb = new OleDbCommandBuilder(dap);

//以下两处的[ ] 最好加上,否则可能会出现莫名的错误,就相当于给字段名、或表名加[]

cb.QuotePrefix = "[";

cb.QuoteSuffix = "]";

try

{

//装载,根据SQL语句从数据库里读来数据,

dap.Fill(tempDT);

//设置DataTable主键字段

tempDT.PrimaryKey = new DataColumn[] { tempDT.Columns["勘验号"] };

//取DataSet中表1的数据,此处的dsTable是用于盛放从Excel表中读出的数据

DataTable dsTable = ds.Tables[0];

//遍历dsTable中的每一行数据

foreach (DataRow dr in dsTable.Rows)

{

//在tempDT中查找数据库中是否已经存在该条数据

DataRow modyRow = tempDT.Rows.Find(dr["勘验号"]);

//如果数据库已经存在该行,则修改记录,不进行插入

if (modyRow != null)

{

//设置该行记录为“已修改”状态,次操作必须。

tempDT.Rows.Find(dr["勘验号"]).SetModified();

//重新给该记录赋值

tempDT.Rows.Find(dr["勘验号"]).ItemArray = dr.ItemArray;

}

else

{

//新增

tempDT.Rows.Add(dr.ItemArray);

}

}

//执行操作,这样就不用写SQL语句,它自己会操作

dap.Update(tempDT);

return true;

}

catch (Exception ex)

{

Console.Write(ex.Message);

return false;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: