这是我上次讨论的后续行动(Whenever i try to run this code it gives me an error. [Asp.net SQL]) 所以我做了你告诉我的事情并添加了参数,但现在我得到了一个不同的错误。 (它没有参数,但我不能在没有参数的情况下插入数据库) 这是完整的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.OleDb;
public partial class ASPX_register : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{
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/ShakedDB.mdb;");
dbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + Path;
dbCmd.Connection = dbCon;
OleDbParameter pUser = new OleDbParameter();
OleDbParameter pPass = new OleDbParameter();
OleDbParameter pEmail = new OleDbParameter();
pUser.ParameterName = "@Username";
pUser.Value = username;
pPass.ParameterName = "@Password";
pPass.Value = password;
pEmail.ParameterName = "@Email";
pEmail.Value = email;
OleDbDataAdapter dataA = new OleDbDataAdapter(dbCmd);
dbCmd.CommandText = String.Format("SELECT * FROM Members WHERE username = @Username");
DataTable dataT = new DataTable();
dataA.Fill(dataT);
if (dataT.Rows.Count == 0)
{
dbCmd.Parameters.Add(pUser);
dbCmd.Parameters.Add(pPass);
dbCmd.Parameters.Add(pEmail);
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");
}
}
catch (Exception ex)
{
Response.Write(ex);
}
}
}
这是错误:http://prntscr.com/6fg029。 hewbrew部分转换为"没有为一个或多个所需参数设置值"。 请帮帮我,谢谢。 :)
答案 0 :(得分:0)
首先,在填充数据表之前,在SELECT语句中使用@Username作为参数,而不将其添加到该查询中。 IE浏览器。你需要,
dbCmd.Parameters.Add(pUser);
DataTable dataT = new DataTable();
在你的if条件下,我建议创建一个新的OleDbCommand,而不是试图回收前一个。您还需要从insert语句中的参数中删除单引号(参数化会自动处理)。即,
dbCmd.CommandText = String.Format("INSERT INTO Members (username, [password], email) VALUES (@Username,@Password,@Email);");
您也在使用数据库连接做一些奇怪的事情。您正在重新打开并关闭它,如果"声明由于某种原因。只需打开顶部的连接,然后将其关闭到if / else条件之外。
我找到了一个与你想要的相似的例子: