针对SQLite查询结果的C#IF语句

时间:2010-05-25 18:25:41

标签: c# sqlite

我有一个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 个答案:

答案 0 :(得分:2)

如果你想检查是否有一个带有某个文件名的行,那么你也可以使用ExecuteScalar

  

SELECT COUNT(*)FROM Import WHERE 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.
  }
}

答案 1 :(得分:0)

ExecuteNonQuery适用于非查询。如果要查询数据,请使用ExecuteReader

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