IndexOutOfRangeException (C #) в OleDBDataReader с функцией подсчета SQL - PullRequest
0 голосов
/ 27 августа 2009

Добрый день,

У меня проблема с разделом кода, над которым я работаю, который проверяет, существует ли уже элемент данных с таким именем в базе данных.

Следующий код вызывает исключение 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;            
    }

.. в этой строке

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

Функция выполняется следующим образом:

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

{

}

и т.д ..

Может ли это быть проблемой с OleDB и как он обрабатывает операторы SQL? Возможно, читатель буквально ищет рубрику «Результат»?

Я надеюсь, что предоставил достаточно информации.

Привет

Ответы [ 4 ]

2 голосов
/ 27 августа 2009

Или вы пытались использовать ExecuteScalar? Пропускает всю программу чтения данных.

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.executescalar.aspx

object results = cmd.ExecuteScalar();

или

int results = (int)cmd.ExecuteScalar();
2 голосов
/ 27 августа 2009

Используйте

result=(int)reader[0];
1 голос
/ 27 августа 2009

Я думаю, вы можете просто попытаться сделать следующее ..

    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 голосов
/ 27 августа 2009

вы пробовали оператор SQL в анализаторе запросов?

...