注册表中没有给出一个或多个必需参数的值

时间:2015-03-11 14:15:55

标签: c# asp.net sql-server sqlparameters

这是我上次讨论的后续行动(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部分转换为"没有为一个或多个所需参数设置值"。 请帮帮我,谢谢。 :)

1 个答案:

答案 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条件之外。

我找到了一个与你想要的相似的例子:

C# OleDBCommand Tutorial