C# SQLException未由C中的用户代码处理#
我尝试检查用户是否存在。我尝试:C# SQLException未由C中的用户代码处理#,c#,asp.net,sql,sql-server-2005,C#,Asp.net,Sql,Sql Server 2005,我尝试检查用户是否存在。我尝试: public static bool GetUser(string tblName, string UserName,string Password,string Usertype) { try { using (SqlConnection con = Connection.GetConnection()) {
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;
}
}
调用此方法时,出现以下错误。连接已成功建立,我这样调用此方法。
bool Check = UserLogin.GetUser("OnlineCertificationLogin", "admin", "admin", "Admin");
我的桌子结构是
找不到我的错误。谢谢。我想这都是关于字符串值注入到最终的
SQL查询中的问题
不要使用简单的字符串concatentation,而是使用将值注入查询,很可能您的问题会得到解决。您没有引用值,因此您的SQL最终为:
select count(UserName) from OnlineCertificationLogin
where Password=admin and usertype=admin and username=Admin
不要通过添加引号来解决此问题。然后,您的代码将适用于给定的示例,但您很容易受到攻击。相反,您应该使用参数化查询解决此问题-有关更多信息和示例,请参阅
尽管不能参数化表名,但应该确保它只能通过可信代码来实现——例如,不能通过用户输入,否则您会再次遇到完全相同的SQL注入问题
请注意,您也不应该像那样以纯文本形式存储密码
我强烈建议你找一本关于安全性的书——可能就在你的街上。(我有一份副本,但我承认我没有读太多-我听过Barry谈论安全问题,他解释得非常清楚。)你必须避开你的参数
此外,您不应该像那样使用直接SQL命令,您应该使用
试试这个,我猜你的问题是关于'的
using (SqlConnection con = Connection.GetConnection())
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = @"SELECT count(UserName) FROM" + tblName +
" WHERE Password=@pPass AND usertype=@pUsertype AND
username=@pUsername";
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;
}
}
cmd.CommandText = "select count(UserName) from " + tblName + " where Password='" + Password + "' and usertype='" + Usertype + "' and username='"+ UserName + "'";