2014-03-14 33 views
0

我試圖查詢CSV文件。它適用於我做一個簡單的選擇,但只要我嘗試添加一個where子句,我碰到沒有給出一個或多個所需的參數值Oledb查詢中的一個或多個必需參數沒有給出值

顯然,它聽起來像沒有得到提供的參數,但我試圖通過多種方式傳遞它。請參閱下面的一些代碼樣本

DateTime lastRunDate = Convert.ToDateTime(ConfigurationManager.AppSettings["LastRunDate"]); 

OleDbConnection conn = new OleDbConnection(
      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + base.applicationRoot + ";" + 
      "Extended Properties=\"text;HDR=Yes;FMT=CSVDelimited\""); 

// This works just fine 
//OleDbDataAdapter adapter = new OleDbDataAdapter(String.Format("select * from {0}", 

// This gives the error 
OleDbDataAdapter adapter = new OleDbDataAdapter(String.Format("select top 100 * from [{0}] where {0}.sale_date = @sDate", base.csvFileName), conn); 
//adapter.SelectCommand.Parameters.Add("@sDate", OleDbType.DBDate).Value = lastRunDate; 
adapter.SelectCommand.Parameters.AddWithValue("@sDate", lastRunDate); 

// This also gives the same error as above 
//OleDbDataAdapter adapter = new OleDbDataAdapter(String.Format("select top 100 * from {0} where sale_date = '{1}'", base.csvFileName, lastRunDate), conn); 
base.csvFileName, lastRunDate.ToShortDateString()), conn); 

DataTable dt = new DataTable(); 
adapter.Fill(dt); 

回答

0

,我發現他的問題有了這個。該查詢根本不理解列名。

我認爲設置HDR=Yes意味着oledb會讀取第一行標題,因此知道它們。但直到我添加了一個schema.ini文件,我才用這種方法查詢。

Here's some more about schema.ini files

1

我不知道C#什麼,我還是體面新的SQL,但也許這是你查詢的SELECT頂部。我知道SELECT TOP在所有數據庫系統中都不被接受,並且它包含在兩個查詢中都會給你帶來問題。你有沒有嘗試刪除,並使用LIMIT?

"select top 100 * from [{0}] where {0}.sale_date = @sDate" 

"select * from [{0}] where {0}.sale_date = @sDate LIMIT 100" 

,因爲它不是一個具體的答案,但我也沒有必要的代表但我會加入這個註釋。:(

+0

感謝您的意見,但我已經嘗試過沒有前100名。 –

1

刪除此行。您添加參數兩次。

adapter.SelectCommand.Parameters.AddWithValue("@sDate", lastRunDate); 

,並確保該值出現在lastRunDate variab樂。它不應該是空的。

編輯:

刪除表的名字從那裏condtion,這樣使用

選擇前100 *從[{0}] SALE_DATE = @ SDATE

+0

感謝您的輸入,但這是我的錯誤。這只是我嘗試過的許多事情之一。我註釋了參數 –

+0

@TheJonasPersson的添加之一我檢查了你的代碼並重現了錯誤,我已經編輯了我的答案,請檢查。 – Shell

+0

對不起,那仍然沒有爲我做。但是,我發現了我的問題。 where語句不能識別第一行中的列名。如果我將'sale_date'更改爲'AI'(Excel中的實際列),它就可以工作。那麼,新的問題。我如何獲得列名?我認爲'HDR =是'可以做到這一點。 –

1

Excel文件,並在查詢列名稱不一樣。

  1. 列名缺失。
  2. 列名不存在於Excel文件中。
相關問題