Dataset 批量錄入

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章