在SQL表中搜索结果

时间:2014-09-30 17:32:18

标签: c# mysql sql sql-server tsql

我需要在C#中搜索SQL表中的值(文件名)。如果它存在则返回TRUE,如果不返回FALSE并继续我的代码。

这就是我所拥有的,但它不起作用:

SqlCommand cmdName = new SqlCommand("SELECT CASE WHEN EXISTS (SELECT * FROM [dbo].[Document] WHERE FileName = @NewFileName) THEN CAST (1 AS BIT) ELSE CAST (0 AS BIT) )", con);
{
 cmdName.Parameters.AddWithValue("@NewFileName", NewFileName);
 cmdName.ExecuteNonQuery();
}

有什么建议吗?

整个代码是为了防止用户将文件重命名为已存在于表中的文件。所以,如果有更好的方法,我会很感激帮助。

2 个答案:

答案 0 :(得分:1)

使用IF EXISTS是最快的vay

string cmdText = @"IF EXISTS(SELECT 1 FROM [dbo].[Document] WHERE FileName = @NewFileName)
                   SELECT 1 ELSE SELECT 0"
SqlCommand cmdName = new SqlCommand(cmdText, con);
cmdName.Parameters.AddWithValue("@NewFileName", NewFileName);
int result = Convert.ToInt32(cmdName.ExecuteScalar());
if(result == 1)
   Console.WriteLine("File exists");

当然你需要改变所谓的方法。 ExecuteNonQuery不适用于SELECT查询,因为返回值是INSERT / DELETE / UPDATE之类的操作更改或修改的行数。相反,ExecuteScalar返回执行的查询的第一行的第一列。

答案 1 :(得分:0)

您可以使用如下所示,这简化了SQL查询。

SqlCommand cmdName = new SqlCommand("SELECT 1 FROM [dbo].[Document] WHERE FileName = @NewFileName", con);
cmdName.Parameters.AddWithValue("@NewFileName", NewFileName);
var result =  cmdName.ExecuteScalar();
if(result != null)
{
      // implies data exist
}

或者你可以使用它。

SqlCommand cmdName = new SqlCommand("SELECT 1 FROM [dbo].[Document] WHERE FileName = @NewFileName", con);
cmdName.Parameters.AddWithValue("@NewFileName", NewFileName);
SqlDataReader sdr = cmdName.ExecuteReader();
if (sdr.HasRows && sdr.Read())
{
          // implies data exist
}

//如果您可以检查物理文件是否存在于目录中,则不需要进行数据库调用。文件检查 - System.IO.File.Exists("PathToFile")