none
OleDbCommand 對 excel 做 update RRS feed

  • 問題

  • Dear All:

            小弟欲使用C#對excel某些格子做數據上的修改,

            以下是我的code

    void StartTurn(string str,string strFileFullName)
            {
                OleDbConnection objConn = new OleDbConnection(conn_Excel(strFileFullName));
                objConn.Open();
                OleDbCommand objCmdSelect = new OleDbCommand(str, objConn);
                OleDbDataReader DataReader = objCmdSelect.ExecuteReader();
                
                string strSentence1 = "";
                string strSentence2 = "";
    
                string strChangWord1 = "";
                string strChangWord2 = "";
    
                int iRow = 1;
    
    
                while (DataReader.Read())
                {
                    iRow++;
                    if (!DataReader.IsDBNull(2) && !DataReader.IsDBNull(3))
                    {
                        strSentence1 = DataReader.GetString(2);
                        strSentence2 = DataReader.GetString(3);
    
                        if (strSentence1.IndexOf("XX") != -1)
                        {
                            strSentence1 = strSentence1.Replace("XX", "~XX~");
                            strSentence2 = strSentence2.Replace("XX", "~XX~");
    
                            //Update strSentence1 / strSentence2
                            UpdateSentence(strSentence1, strSentence2, objConn, iRow);
                        }
                        else if (!DataReader.IsDBNull(12) && !DataReader.IsDBNull(13))
                        {
                            SubOne(DataReader.GetString(12),ref iInsertLocationStart1, ref iInsertLocationLength1);
                            SubOne(DataReader.GetString(13), ref  iInsertLocationStart2, ref  iInsertLocationLength2);
    
                            
                            try
                            {
                                strChangWord1 = strSentence1.Substring(iInsertLocationStart1, iInsertLocationLength1);
                                strChangWord2 = strSentence2.Substring(iInsertLocationStart2, iInsertLocationLength2);
    
                                strSentence1 = strSentence1.Replace(strChangWord1, "~" + strChangWord1 + "~");
                                strSentence2 = strSentence2.Replace(strChangWord2, "~" + strChangWord2 + "~");
                                //Update strSentence1 / strSentence2
                            }
                            catch
                            {
                                UpdateFalse();
                                continue;
                            }
                            UpdateSentence(strSentence1, strSentence2, objConn, iRow);
                        }
                    }
                    else
                        continue;
                }
                DataReader.Close();
                objConn.Close();
            }
    void UpdateSentence(string str1, string str2, OleDbConnection objConn, int iRow)
            {
                OleDbCommand cmd = new OleDbCommand(U_ExcelTab(strEat), objConn);
                cmd.ExecuteNonQuery();
    
    
                Console.WriteLine("==============================");
                Console.WriteLine("str1 = " + str1);
                Console.WriteLine("str2 = " + str2);
            }
    
     public string S_ExcelTab(string str)
            {
                string p_sql = string.Format("SELECT * FROM [{0}$]", str);
                return p_sql;
            }
    
            public string U_ExcelTab(string str)
            {
                string p_sql = string.Format("UPDATE [{0}$] SET C = 'test',D = 'test' WHERE C  = 'test'", str);
                return p_sql;
            }
    
            public string conn_Excel(string xlsFullName)
            {
                string conn_Excel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsFullName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'";
                return conn_Excel;
            }

    若直接以sql語法會出現error : 無值提供給一或多個必要參數。


    目前碰到狀況是update的地方,搜尋過一些講法似乎是無法直接對excel做update,還請各位先進們指導,感謝

    2012年7月9日 上午 08:07

解答

  • Dear All:

         小弟在嘗試過程中無意中解決

    共分成三個問題,

    1:

    參考http://www.blueshop.com.tw/board/show.asp?subcde=BRD20060607153651QK2修改為

     public string conn_Excel(string xlsFullName)
            {
                string conn_Excel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsFullName + ";Extended Properties='Excel 8.0;HDR=Yes;Persist Security Info=False'";
                return conn_Excel;
            }
    2:自己糊塗了

    在update語法裡可能有單引號[']的東西,必須replace為兩個單引號''

    3:自己糊塗*2

    欄位打錯

    再發問過程中思索,對自己真的有幫助,thank MSDN 

    • 已標示為解答 Web Tsai 2012年7月9日 上午 09:03
    2012年7月9日 上午 09:03
  •  在update語法裡可能有單引號[']的東西,必須replace為兩個單引號''

    您好,

    所以建議您使用 Parameters,就不用去replace單引號了哦!



    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 Web Tsai 2012年7月9日 上午 10:56
    2012年7月9日 上午 10:39
  • 雖然是 Excel ,不過我覺得也可以看這篇,透過界面試完語法在查詢:

    .Net 學習 Access 資料庫的基礎測試


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    • 已標示為解答 Web Tsai 2012年7月10日 上午 03:47
    2012年7月9日 下午 02:18

所有回覆

  • Dear All:

         小弟在嘗試過程中無意中解決

    共分成三個問題,

    1:

    參考http://www.blueshop.com.tw/board/show.asp?subcde=BRD20060607153651QK2修改為

     public string conn_Excel(string xlsFullName)
            {
                string conn_Excel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsFullName + ";Extended Properties='Excel 8.0;HDR=Yes;Persist Security Info=False'";
                return conn_Excel;
            }
    2:自己糊塗了

    在update語法裡可能有單引號[']的東西,必須replace為兩個單引號''

    3:自己糊塗*2

    欄位打錯

    再發問過程中思索,對自己真的有幫助,thank MSDN 

    • 已標示為解答 Web Tsai 2012年7月9日 上午 09:03
    2012年7月9日 上午 09:03
  •  在update語法裡可能有單引號[']的東西,必須replace為兩個單引號''

    您好,

    所以建議您使用 Parameters,就不用去replace單引號了哦!



    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 Web Tsai 2012年7月9日 上午 10:56
    2012年7月9日 上午 10:39
  • Dear 亂馬客:

         謝謝你的提醒,忘了還有 Parameters 可以用

    web

    2012年7月9日 上午 10:56
  • 雖然是 Excel ,不過我覺得也可以看這篇,透過界面試完語法在查詢:

    .Net 學習 Access 資料庫的基礎測試


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    • 已標示為解答 Web Tsai 2012年7月10日 上午 03:47
    2012年7月9日 下午 02:18
  • Dear 心冷兄:

          thanks a lot

    web

    2012年7月10日 上午 03:47