我需要在 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();
}
有什么建议吗?
整个代码是为了防止用户将文件重命名为表中已存在的文件。因此,如果有更好的方法,我将不胜感激。
最佳答案
使用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 返回所执行查询的第一行的第一列。
关于c# - SQL 表中的搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26126724/