【发布时间】: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