【问题标题】:Search Results in SQL TableSQL 表中的搜索结果
【发布时间】:2014-09-30 17:32:18
【问题描述】:

我需要在 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();
}

有什么建议吗?

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

【问题讨论】:

  • 如果您需要适当的帮助,您应该定义“不工作”。没有结果?查询抛出异常? ...
  • 请指定这是用于 Sql Server 还是 MySql
  • 原始查询:SELECT CASE WHEN EXISTS (SELECT * FROM [dbo].[Document] WHERE FileName = 'SomeFileName') THEN CAST (1 AS BIT) ELSE CAST (0 AS BIT) 有效。但是当我尝试从 C# 执行它时,我无法让它工作。
  • 解决了。我用了你的第二种方法。感谢您的帮助。

标签: c# mysql sql sql-server tsql


【解决方案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 返回所执行查询的第一行的第一列。

【讨论】:

    【解决方案2】:

    你可以像下面这样使用,这已经简化了 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")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多