2012-05-13 55 views
0

我尝试检查用户存在或not.I尝试:
的SQLException是由用户代码未处理的在C#

public static bool GetUser(string tblName, string UserName,string Password,string Usertype) 
     { 
      try 
      { 

       using (SqlConnection con = Connection.GetConnection()) 
       { 
        using (SqlCommand cmd = con.CreateCommand()) 
        { 
         cmd.CommandText = "select count(UserName) from " + tblName + " where Password=" + Password + " and usertype=" + Usertype + " and username="+ UserName + ""; 
         object obj = cmd.ExecuteScalar(); 
         if (obj != null) 
          return true; 
         return false; 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 

     } 

当我把这个方法我得到了下面的错误。
My Error
连接成功建立,我称这种方法是这样的。

bool Check = UserLogin.GetUser("OnlineCertificationLogin", "admin", "admin", "Admin"); 

我的表结构

My Table Structure
无法找到我的mistake.Thanks。

回答

6

你不是引用的值,让你的SQL作为结束:

select count(UserName) from OnlineCertificationLogin 
where Password=admin and usertype=admin and username=Admin 

加引号不要解决这个问题。你的代码然后工作为给定的样本,但你很容易SQL injection attacks。相反,您应该使用参数化查询来解决此问题 - 有关更多信息和示例,请参阅SqlCommand.Parameters

虽然不能参数表名,你应该确保它仅不断来通过受信任的代码 - 不通过用户输入,例如,否则你又得到了完全一样的SQL注入问题。

请注意,您不应该以纯文本存储密码那样。

我强烈建议你拿一本关于安全的书 - Beginning ASP.NET Security可能会在你的街上。 (我有一个副本,但我承认没有看过它了 - 我已经听过巴里谈论安全,虽然,他解释这一切非常清楚。)

1

我认为这是所有关于字符串值注入到最后SQL query

不要使用简单字符串concatenaion,但使用SqlParameter将值注入查询,很可能您的问题将被解决。

0

你要逃脱你的参数,

而且,你不应该使用直接的SQL命令那样,你应该使用SQL parameterization

  using (SqlConnection con = Connection.GetConnection()) 
      { 
       using (SqlCommand cmd = con.CreateCommand()) 
       { 
        cmd.CommandText = @"SELECT count(UserName) FROM" + tblName + 
        " WHERE [email protected] AND [email protected] AND 
        [email protected]"; 
        cmd.Parameters.Add("@pUsername", SqlDbType.VarChar); 
        cmd.Parameters.Add("@pPass", SqlDbType.VarChar); 
        cmd.Parameters.Add("@pUsertype", SqlDbType.VarChar); 
        cmd.Parameters["pUsername"] = UserName; 
        cmd.Parameters["pPass"] = Password; 
        cmd.Parameters["pUsertype"] = Usertype; 
        object obj = cmd.ExecuteScalar(); 
        if (obj != null) 
         return true; 
        return false; 
       } 
      } 
0
cmd.CommandText = "select count(UserName) from " + tblName + " where Password='" + Password + "' and usertype='" + Usertype + "' and username='"+ UserName + "'"; 

试试这个,我猜你的问题“。

相关问题