2010-05-25 2 views
2

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

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 
} 

EDIT: добавлено пространство в пути, так что слэш не ест кавычку

+1

Итак ... что это вопрос? – Jay

+0

Простите, это было плохое описание. Я обновил выше .. Больше смысла? –

ответ

2

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

SELECT COUNT (*) FROM Import WHERE FileName = @FileName

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

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

EDIT: Все это с параметрами будет выглядеть примерно так:

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

«Недостаточно параметров, предоставленных команде» - это ошибка, которую я получаю для int count = Convert.ToInt32 и т. Д. И т. Д. Отсутствует что-то? –

+0

Да, вам не хватает параметра. «@FileName» - это параметр для запроса. По этой причине он называется параметризованным запросом. Посмотрите на http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/ для примера. – Patko

+0

Очень хорошо! Это работает, Моя единственная проблема, и я имел это раньше, это то, что когда я добавляю этот дополнительный параметр, он отбрасывает столбцы в моем db ... Все данные сдвигаются на 1 столбец. Почему это? –

0

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

SqlDataReader myReader = insertCommand.ExecuteReader(); 
while(myReader.Read()) 
{ 
    Console.WriteLine(myReader.GetString(0)); //0 is the column-number 
} 
+0

hmm. Итак, это возвращает номер столбца в таблице? могу ли я сказать, строка myVar = myReader.GetString (0); а затем использовать его для выражения if? - Угадайте, что я запутался, где это происходит в –

+0

@jake: У меня нет никаких 'if', я не знаю, о чем вы говорите. –

Смежные вопросы