C # IF оператор против результата запроса SQLite - PullRequest
2 голосов
/ 25 мая 2010

У меня есть приложение на C #, которое я пытаюсь проверить в своей базе данных sqlite, если в столбце FileName уже существует имя файла, если его не существует, выполнить некоторый код. Чтобы уточнить - этот код не работает .. он говорит, что я не могу преобразовать insertCommand.ExecuteNonQuery в строку. Мне нужно запросить таблицу, и если имя файла не существует, то продолжить.

string[] files = Directory.GetFiles(@"C:\Documents and Settings\js91162\Desktop ",
        "R303717*.txt*", SearchOption.AllDirectories);
foreach (string file in files)
{
    string FileNameExt1 = Path.GetFileName(file);

    insertCommand.CommandText = @" 
            SELECT * FROM Import WHERE FileName == FileNameExt1;";
}
string contYes = insertCommand.ExecuteNonQuery();

if (string.IsNullOrEmpty(contYes))
{
    //more code
}

РЕДАКТИРОВАТЬ : добавлен пробел в пути, чтобы косая черта не кавычки

Ответы [ 2 ]

2 голосов
/ 25 мая 2010

Если вы хотите проверить, есть ли строка с каким-либо именем файла, вы также можете использовать ExecuteScalar с

ВЫБЕРИТЕ СЧЕТЧИК (*) ИЗ ИГРЫ, ГДЕ FileName = @ FileName

Конечно, вы также должны установить параметр для команды. Тогда вы можете сделать

int count = Convert.ToInt32(insertCommand.ExecuteScalar());
if (count == 0)
{
  // code...
}

РЕДАКТИРОВАТЬ: все с параметрами будет выглядеть примерно так:

selectCommand.CommandText = "SELECT COUNT(*) FROM Import Where FileName = @FileName";
selectCommand.Parameters.Add("@FileName", SqlDbType.NVarChar); // Use appropriate db type here
insertCommand.CommandText = "INSERT INTO Import (FileName, ...) VALUES (@FileName, ...");
insertCommand.Parameters.Add("@FileName", SqlDbType.NVarChar);
// Add your other parameters here.
// ...
foreach (string file in files) 
{ 
  var fileName = Path.GetFileName(file);
  selectCommand.Parameters[0].Value = Path.GetFileName(fileName);
  int count = Convert.ToInt32(selectCommand.ExecuteScalar());
  if (count == 0)
  {
    // File does not exist in db, add it.
    insertCommand.Parameters[0].Value = fileName;
    // Init your other parameters here.
    // ...

    insertCommand.ExecuteNonQuery(); // This executes the insert statement.
  }
}
0 голосов
/ 25 мая 2010

ExecuteNonQuery для не-запросов. Если вы хотите запросить данные, используйте ExecuteReader

SqlDataReader myReader = insertCommand.ExecuteReader();
while(myReader.Read()) 
{
    Console.WriteLine(myReader.GetString(0)); //0 is the column-number
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...