c# - SQL 表中的搜索结果

标签 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();
}

有什么建议吗?

整个代码是为了防止用户将文件重命名为表中已存在的文件。因此,如果有更好的方法,我将不胜感激。

最佳答案

使用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/

相关文章:

mysql - 尝试从 mysql 中提取 '||' 符号之前的前 n 个字符

mysql - 触发器仅对查询执行一次后台操作

C# 如何从图片框中获取位图

c# - 如何取消 CancellationToken

mysql - 通过多链连接计数

sql - mysql:有没有办法做 "INSERT INTO"2 个表?

mysql - 一次连接多个表 :

c# - 如何使用 C# 在 Unity 中解析复杂的 JSON 对象

c# - 像 Jabbr 这样的内容提供商

mysql - 重命名 MySQL 中的列