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