每当我尝试运行此代码时,它都会给我一个错误。 [Asp.net SQL]

时间:2015-03-10 20:49:24

标签: sql asp.net database ms-access

我正在尝试运行此注册表单,每当我尝试运行它时,我都会收到一条错误消息,说我在使用INSERT INTO命令时出错了。

以下是错误日志:http://i.imgur.com/dQYP0U7.png

这是完整的代码:

protected void Page_Load(object sender, EventArgs e)
{
    string username = Request.Form["username"];
    string password = Request.Form["password"];
    string email = Request.Form["email"];

    OleDbConnection dbCon = new OleDbConnection();
    OleDbCommand dbCmd = new OleDbCommand();

    String Path = Server.MapPath(@"../App_Data/XXX.mdb;");
    dbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + Path;
    dbCmd.Connection = dbCon;

    OleDbDataAdapter dataA = new OleDbDataAdapter(dbCmd);
    dbCmd.CommandText = String.Format("SELECT * FROM Members where username = '{0}';", username);
    DataTable dataT = new DataTable();
    dataA.Fill(dataT);

    if (dataT.Rows.Count == 0)
    {
        //dbCmd.CommandText = String.Format("INSERT INTO Members (username, password, email) VALUES ('{0}','{1}','{2}');", username, password, email);
        dbCmd.CommandText = String.Format("INSERT INTO Members (username, password, email) VALUES ('" + username + "','" + password + "','" + email + "')");
        dbCon.Open();
        dbCmd.ExecuteNonQuery();
        dbCon.Close();
    }
    else
    {
        Response.Write("That username is alredy taken");
        Response.Redirect("register.aspx");
    }
}

我希望它正确执行命令并将其添加到数据库中。 如您所见,我尝试使用2种方法将数据输入数据库

dbCmd.CommandText = String.Format("INSERT INTO Members (username, password, email) VALUES ('{0}','{1}','{2}');", username, password, email);

dbCmd.CommandText = String.Format("INSERT INTO Members (username, password, email) VALUES ('" + username + "','" + password + "','" + email + "')");

他们都没有奏效。

有人可以帮我解决这个问题吗?

谢谢:)

2 个答案:

答案 0 :(得分:1)

问题是电子邮件地址包含@符号,该符号被解释为sql参数。

解决方案是正确使用参数

答案 1 :(得分:0)

TLDR;代码很糟糕,对所有类型的东西开放。普通网站中的db conn信息不应该是。您需要一个参数化存储过程来安全地执行此操作。清理客户端上的数据,并编写代码来处理特殊符号。将表单收集的值设置为SQL输入参数,调用您的sproc传递它们,以便根据返回值进行操作。

(更长的解释)  1.将连接字符串信息放入web.config文件中  2.强制执行一些客户端验证  3.根据名称是否已存在,创建将更新或插入的单个存储过程  4.运行您的代码以登录将从表单收集的数据作为SPROC的输入参数传入SPROC。

我错过了很多伪代码等。如果你对它的概念感到好奇,如果你正在寻找实际的代码,我可以帮你另一次。