【发布时间】:2014-04-08 12:59:54
【问题描述】:
我正在尝试使用 INSERT 命令将新用户添加到 SQL 数据库,但是当我运行它时会抛出一个错误,指出它需要 @Username 参数。我给了它这个参数:/
任何想法都出错了,我尝试了大约两个小时来修复,但不知道出了什么问题。
我正在使用 ASP.Net Web 表单和 C# 代码
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Data.SqlClient;
using HashLibrary;
using System.Configuration;
using System.Text.RegularExpressions;
using System.Data;
namespace LetsRentAgentZoneB
{
public partial class UserAdd : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void LoginBtn_Click(object sender, EventArgs e)
{
ResultLbl.Text = Hasher.HashString(PasswordTxt.Text.Trim());
if (UsernameTxt.Text.Length <= 50 && PasswordTxt.Text.Length <= 25)
{
SqlConnection conn = null;
try
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LetsRent"].ConnectionString);
SqlCommand cmd = new SqlCommand("AgentRegisterNewUser", conn);
//SqlParameter user = new SqlParameter();
//user.ParameterName = "@username";
//user.Value = UsernameTxt.Text.Trim();
//cmd.Parameters.Add(user);
cmd.Parameters.Add("@Username", SqlDbType.VarChar).Value = UsernameTxt.Text.Trim();
SqlParameter pass = new SqlParameter();
pass.ParameterName = "@password";
pass.Value = Hasher.HashString(PasswordTxt.Text.Trim());
cmd.Parameters.Add(pass);
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
ResultLbl.Text = "User added!";
}
catch (Exception ex)
{
ResultLbl.Text = "error";
throw new Exception("Execption adding account. " + ex.Message);
}
}
catch (Exception ex)
{
ResultLbl.Text = "error";
throw new Exception("Execption adding account. " + ex.Message);
}
}
}
}
}
SQL 命令
USE [LetsRent]
GO
/****** Object: StoredProcedure [dbo].[AgentRegisterNewUser] Script Date: 08/04/2014 14:03:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Chris
-- Create date: 08/04/2014
-- Description: Adds a new user to AgentUser Database
-- =============================================
ALTER PROCEDURE [dbo].[AgentRegisterNewUser]
-- Add the parameters for the stored procedure here
@Username VarChar(50),
@Password VarChar(25)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT @Username, @Password
INSERT INTO AgentUsers(Username, Password)
VALUES ( @Username, @Password);
END
【问题讨论】:
-
能否请您发布Hasher类的代码。我觉得可能是你的问题。具体来说,我认为问题出在这个类的方法HashString上。
-
您的
SqlCommand是做什么的?它是一个存储过程吗?它只包含AgentRegisterNewUser?? -
@ChristosPaisios Hasher 类显然是对密码进行哈希处理。这和他的问题有什么关系?
-
是的,Hasher 类有效。我还发布了 SQL 内部命令
-
您需要将命令类型指定为存储过程。检查下面 Remus 的答案。我不会添加答案,因为您已经有了一个好的答案,除非您还有其他问题。
标签: c# asp.net sql sql-insert