2009-08-27 64 views
0

下午好OleDBDataReader,IndexOutOfRangeException(C#)與SQL COUNT函數

我遇到的代碼我工作的一個部分的問題進行檢查,以查看是否同名的DataItem中已經存在一個數據庫。

下面的代碼拋出了一個IndexOutOfRangeException

static int checkExists(String checkIf) 
    { 
     String connectionString = "provider=Microsoft.Jet.OLEDB.4.0;data source=" + @"ffmpegDB.mdb"; 
     OleDbConnection connection = new OleDbConnection(connectionString); 
     connection.Open(); 
     OleDbCommand command = connection.CreateCommand();   

     try 
     { 
      command.CommandText = checkIf; 

      OleDbDataReader reader = command.ExecuteReader(); 

      reader.Read(); 
      try 
      { 
       result = (int)reader["Result"]; 
      } 
      catch (InvalidOperationException ioe) { } 

      reader.Close(); 
      connection.Close(); 
     } 
     catch (FormatException Fe) 
     {} 

     return result;    
    } 

..on此線

result = (int)reader["Result"]; 

該函數如下執行:

if (checkExists("SELECT COUNT(*) AS 'Result' FROM Files WHERE Filename ='"+fileNames[i]+"' AND File_Directory ='"+directories[i]+"'")==0) 

{

}

等。

難道這是與OLEDB的問題以及如何處理SQL語句? 也許讀者正在從字面上尋找「結果」一欄?

我希望我已經提供了足夠的信息。

問候

回答

2

使用,

result=(int)reader[0]; 
+0

完美地工作。謝謝 – Ric

1

我想你可以嘗試做如下..

if (checkExists("SELECT COUNT(*) AS Result FROM Files WHERE Filename ='"+fileNames[i]+"' AND File_Directory ='"+directories[i]+"'")==0);// 
reader.GetInt32(reader.GetOrdinal("Result")); 

OR

if (checkExists("SELECT COUNT(*) FROM Files WHERE Filename ='"+fileNames[i]+"' AND File_Directory ='"+directories[i]+"'")==0); // 
reader.GetInt32(0);// use this 
+0

再次,這工作得很好。證明有幾百種方法來完成一個過程 – Ric

0

您是否嘗試過查詢分析器中的SQL語句?