【问题标题】:Check a field is in sql database using c#使用c#检查一个字段是否在sql数据库中
【发布时间】:2013-08-29 16:53:30
【问题描述】:

我想检查用户在我的数据库中的天气(检查 id)。我正在使用以下代码。这是工作。我只是想知道,这是正确的方法还是有其他方法可以做得更好(例如使用 COUNT(*) 或任何其他查询)。我正在 MVC4 中做我的项目

  public bool CheckUser(int mem_id)
    {
        bool flag = false;
        using (SqlConnection con = new SqlConnection(Config.ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT Id FROM Mem_Basic WHERE Id="+ mem_id +"", con))
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    flag = true;
                }
            }
        }
        return flag;
    }

【问题讨论】:

标签: c# sql sql-server asp.net-mvc-4


【解决方案1】:

您也可以执行与您类似的操作,但只需检查 null。

public bool CheckUser(int mem_id)
{
    bool flag = false;
    using (SqlConnection con = new SqlConnection(Config.ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT Id FROM Mem_Basic WHERE Id="+ mem_id +"", con))
        {
            con.Open();
            if (cmd.ExecuteScalar() != null)
            {
                flag = true;
            }
         }
      }
 }

【讨论】:

  • 如果条件缺失的右大括号
【解决方案2】:

您可以使用ExecuteScalar,而不是使用ExecuteReader。在我看来,你的代码会更干净。查看更多关于MSDN

关于您的 sql 查询:您可以在 Managment Studio 的 SQL 查询分析器中检查性能。查看更多Where is the Query Analyzer in SQL Server Management Studio 2008 R2?。但在 99% 的情况下,它是最佳的。

【讨论】:

    【解决方案3】:

    是的,如果您使用 SELECT COUNT(*) 查询并将返回的单个值分配给 int 而不是使用读取器语法,您的代码会更简单。

    试试这个:

    public bool CheckUser(int mem_id)
    {
        bool flag = false;
        using (SqlConnection con = new SqlConnection(Config.ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Mem_Basic WHERE Id="+ mem_id +""", con))
            {
                con.Open();
                int count = (int) cmd.ExecuteScalar();
                if(count > 0)
                {
                    flag = true;
                }
            }
        }
        return flag;
    }
    

    【讨论】:

      【解决方案4】:

      如果你想要一个单一的值,你可以使用 ExecuteSclar 函数。并使用参数化查询来避免 sql 注入。

      using (SqlConnection con = new SqlConnection(Config.ConnectionString))
                  {
                      using (SqlCommand cmd = new SqlCommand("SELECT 1 FROM Mem_Basic WHERE Id=@id", con))
                      {
      
                          cmd.Parameters.AddWithValue("@ID", yourIDValue);
                          con.Open();
                          var found=(int)cmd.ExecuteScalar(); //1 means found
      
                      }
      
                  }
      

      【讨论】:

        猜你喜欢
        • 2012-01-08
        • 2012-04-24
        • 2021-06-27
        • 1970-01-01
        • 2018-09-09
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 2017-11-22
        相关资源
        最近更新 更多