【问题标题】:Whenever i try to run this code it gives me an error. [Asp.net SQL]每当我尝试运行此代码时,它都会给我一个错误。 [ASP.NET SQL]
【发布时间】:2015-03-10 20:49:23
【问题描述】:

我正在尝试运行此注册表单,每当我尝试运行它时,我都会收到一条错误消息,提示我在使用 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");
    }
}

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

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 + "')");

他们都没有工作。

谁能帮我解决这个问题?

谢谢你:)

【问题讨论】:

  • 仅供参考,您的查询非常容易受到 SQL 注入的攻击
  • 他们是怎么不工作的?你有例外吗?它们不在数据库中吗?您还应该考虑使用参数而不是创建字符串。
  • 另请注意,您的response.Write 是无用的,因为您会立即重定向到register.aspx
  • 在 try catch 块中执行并查看完整堆栈
  • @Shaked - 为什么不试试这里的建议为您的查询创建参数?你的老师会对你的勤奋印象深刻。

标签: sql asp.net database ms-access


【解决方案1】:

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

解决办法是正确使用参数

【讨论】:

  • 我认为 HansUp 可能已经为您找到了问题
  • 您仍然需要修改代码以处理@ 符号。这样做的方法是使用参数。
【解决方案2】:

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

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

我遗漏了很多伪代码等。如果您对它的概念感到好奇,如果您正在寻找实际代码,我可以再次为您提供帮助。

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 2020-10-11
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2023-02-08
    • 2020-12-20
    • 1970-01-01
    • 2022-10-04
    相关资源
    最近更新 更多