【问题标题】:How can I know if such value exists in database? (ADO.NET)我怎么知道数据库中是否存在这样的值? (ADO.NET)
【发布时间】:2009-11-09 16:30:47
【问题描述】:

例如,我有一个表,其中有一列名为“标签”。我想知道本专栏中是否存在价值“编程”。我如何在 ADO.NET 中做到这一点?

我这样做了:

OleDbCommand cmd = new OleDbCommand("SELECT * FROM table1 WHERE Tags='programming'", conn);
OleDbDataReader = cmd.ExecuteReader();
接下来我该怎么办?

【问题讨论】:

    标签: c# .net sql database ado.net


    【解决方案1】:

    使用 SELECT COUNT(*) 并检查结果。 (并使用 ExecuteScalar)

    (假设你知道如何设置连接并使用它)

    【讨论】:

      【解决方案2】:
      SELECT  TOP 1 1
      FROM    table1
      WHERE   Tags='programming'
      

      【讨论】:

      • 这个解决方案更适合你或 Dani 的,因为一旦遇到带有正确标签的一行,服务器就会停止处理。如果列没有被索引,这将阻止表扫描。
      【解决方案3】:

      更好的版本,使用参数而不是字符串连接是一个好习惯,见sql injection

      OleDbCommand cmd = new OleDbCommand("SELECT TOP 1 1
       FROM table1 WHERE Tags=?", conn);
      cmd.Parameters.Add("@p1", OleDbType.VarChar).Value = "Programming";
      OleDbDataReader rdr = cmd.ExecuteReader();
      if(rdr.Read())
          // record exists
      else
         //Not exists
      

      【讨论】:

        【解决方案4】:

        你应该做两件事:

        如果您只是检查是否存在名为 Programming 的标记,则应更改查询以返回 COUNT 而不是返回所有行。

        SELECT TOP 1 Column1 FROM Table1 WHERE Tags = 'Programming'

        您应该在阅读器中检查返回的集合,看看是否有任何行。如果有,则说明标签存在。

        【讨论】:

          猜你喜欢
          • 2011-07-23
          • 2011-02-08
          • 2018-03-21
          • 2012-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-28
          • 1970-01-01
          相关资源
          最近更新 更多