0

我想检查用户在我的数据库中的天气(检查 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;
    }
4

4 回答 4

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

                }

            }
于 2013-08-27T04:41:04.717 回答
2

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

试试这个:

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;
}
于 2013-08-27T04:42:36.190 回答
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;
            }
         }
      }
 }
于 2013-08-27T04:45:37.877 回答
1

而不是使用ExecuteReader你可以使用ExecuteScalar. 在我看来,你的代码会更干净。在MSDN上查看更多信息

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

于 2013-08-27T04:46:30.190 回答