这是cs文件:
public int CheckExisting(String sqlDbQry, String sTable)
{
Qry = sqlDbQry;
con = new OleDbConnection(connectionstr);
if (con.State == ConnectionState.Open)
con.Close();
con.Open();
cmd = new OleDbCommand(Qry, con);
dr = cmd.ExecuteReader();
while (dr.Read())
rQry = Convert.ToInt32(dr[0].ToString());
con.Close();
return rQry;
}
这是我的另一个cs:
protected void btnsub_Click(object sender, EventArgs e)
{
if (objAdmin.CheckExisting("SELECT COUNT(*) FROM registration where Email='" + Textemail.Text.Trim() + "'", "Temp") > 0)
{
lblmail.Text = "Your EmailId already Registered, Please Login!";
return;
}
if (objAdmin.CheckExisting("SELECT COUNT(*) FROM registration where Phone_num='" + Textphone.Text.Trim() + "'", "Temp") > 0)
{
lblmail.Text = "Mobile number already exists, Please Login!";
return;
}
}
当我输入输入详细信息并点击提交时,它会显示类似的错误
以下是Screenshot
的错误任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
您正在从标有“email”的文本框中手动构建sql字符串。电子邮件地址通常包含“@”。因为您正在构建原始SQL查询,所以您将“@”直接放入查询中。 OleDb
将其解释为SQL参数,并期望您提供它,而不是,这是导致错误的原因。如果任何文本框包含'(单引号),您将收到类似的错误。
您应该使用OleDbCommand和OleDbParameter来传递参数,而不是发送原始字符串。这也将修复其他人提到的sql注入攻击漏洞。
答案 1 :(得分:0)
我无法编辑你的帖子,所以我在这里做。
public int CheckExisting(String sqlDbQry, String sTable)
{
try
{
Qry = sqlDbQry;
con = new OleDbConnection(connectionstr);
if (con.State == ConnectionState.Open)
con.Close();
con.Open();
cmd = new OleDbCommand(Qry, con);
dr = cmd.ExecuteReader();
while (dr.Read())
rQry = Convert.ToInt32(dr[0].ToString());
con.Close();
return rQry;
}
catch (OleDbException ex)
{
string message = ex;
//put your message on a texbox or alert handler error on the web
//or while debugging use a breakpoint on the exception handler
//use log
Console.WriteLine(message);
}
}
答案 2 :(得分:0)
请记住,对于OleDb,参数是位置的,而不是命名的。您可以为参数命名,但不能在命令中使用@语法(它会引发有关需要声明标量变量的错误)...正确的语法是使用? ...它将按照您添加它们的顺序获取参数。
另外,我更喜欢.AddWithValue语法,我认为它更具可读性。
答案 3 :(得分:-1)
protected void btnsub_Click(object sender, EventArgs e)
{
if (objAdmin.CheckExisting("SELECT COUNT(*) FROM registration where Email='" + this.Textemail.Text.Trim() + "'", "Temp") > 0)
{
lblmail.Text = "Your EmailId already Registered, Please Login!";
return;
}
if (objAdmin.CheckExisting("SELECT COUNT(*) FROM registration where Phone_num='" + this.Textphone.Text.Trim() + "'", "Temp") > 0)
{
lblmail.Text = "Mobile number already exists, Please Login!";
return;
}
}
只要把this.Textemail.Text和this.Textphone.Text,我希望它对你有所帮助。