/// <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;
}
}
}