none
OleDbDataAdapter更新問題 RRS feed

  • 問題

  • 先道歉,小弟前幾天在論壇一直發問卻不願意去爬文學習,深感抱歉(知道這是不對的)

    今天來發問是小弟尋找了一些文章自己融會一下寫了一段程式碼

    想要達成的目標是之前有發問過的,用Datagridview匯入Excel檔後,想用Button的Click事件儲存編輯過的資料

    這次經過前輩的提醒(學程式要把來龍去脈學到,而不是只學到單點。)小弟知錯了=..=

    自己爬文後想的程式碼在執行時是沒發生錯誤,(原本超開心,想說可以達到儲存了)

    可是重新打開Excel檔才發現根本沒儲存到,可是程式在建置及實際操作後都沒錯誤

    能麻煩各位前輩幫小弟看看這段程式碼哪裡有錯嗎?

    程式碼:

    private void button2_Click(object sender, EventArgs e)
            {
                string ExcelPath = System.Windows.Forms.Application.StartupPath + @"\testexcel.xls";
                string OpenExcelData = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelPath + ";Extended Properties ='Excel 8.0;HDR=Yes;IMEX=2;ReadOnly=0'";
                string OutputSheet = "Select * From [Sheet1$]";
                DataSet ds = new DataSet();
                DataTable dTableOut = new DataTable();
                OleDbConnection conn = new OleDbConnection(OpenExcelData);
                OleDbCommand command = new OleDbCommand(OutputSheet, conn);
                OleDbDataAdapter adapter = new OleDbDataAdapter(command);
                adapter.Update(dTableOut);
            }

    還是小弟又誤會網友的文章了,對不起.....

    2016年5月3日 下午 04:18

解答

  • 一般來說 , 如果是使用一般概念上所謂的資料庫 (如 Access, SQL Server...),在不寫 UpdateCommand 而要直接要用 DbAdapter執行 Update 指令有一個需求就是該資料必須至少有一個欄位是獨一索引鍵, 但我是不知道 Excel 有沒有可以設定獨一索引的方式.(我看起來是沒有)

    在沒有可以設定獨一索引鍵的狀況下, 要能夠使用 DbApapter 做 Update , 那就只能自己寫 Update 指令. 也就是自己寫一個做 Update 功能的 OleDbCommand 再塞給 OleDbAdapter.UpdateCommand

     OleDbDataAdapter 類別 有四個 Command 屬性 (你的寫法其實是把 command 丟給 OleDbCommand.SelectCommand), 分別是

    (a) SelectCommand : 讀取資料用

    (b) InsertCommand : 插入資料用

    (c) UpdateCommand : 更新資料用

    (d) DeleteCommand : 刪除資料用

    上面都有連結, 你可以進去看 MSDN 文件的範例


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2016年5月3日 下午 05:40
    版主

所有回覆

  • 一般來說 , 如果是使用一般概念上所謂的資料庫 (如 Access, SQL Server...),在不寫 UpdateCommand 而要直接要用 DbAdapter執行 Update 指令有一個需求就是該資料必須至少有一個欄位是獨一索引鍵, 但我是不知道 Excel 有沒有可以設定獨一索引的方式.(我看起來是沒有)

    在沒有可以設定獨一索引鍵的狀況下, 要能夠使用 DbApapter 做 Update , 那就只能自己寫 Update 指令. 也就是自己寫一個做 Update 功能的 OleDbCommand 再塞給 OleDbAdapter.UpdateCommand

     OleDbDataAdapter 類別 有四個 Command 屬性 (你的寫法其實是把 command 丟給 OleDbCommand.SelectCommand), 分別是

    (a) SelectCommand : 讀取資料用

    (b) InsertCommand : 插入資料用

    (c) UpdateCommand : 更新資料用

    (d) DeleteCommand : 刪除資料用

    上面都有連結, 你可以進去看 MSDN 文件的範例


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2016年5月3日 下午 05:40
    版主
  • 與其用 OLE DB,為什麼不用像 NPOI 這種類別庫?

    它比 OLE DB 更容易處理 Excel 的資料。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2016年5月4日 上午 02:28
    版主