C# 程序或功能';usp用户信息2';应为参数'@用户名';,这是没有提供的
我正在使用ASP.NET 4.0和SQL Server 2008 R2。我想使用存储过程为“用户注册”网页插入数据。每当我插入数据时,错误显示为“过程或函数'usp_User_Info2'需要参数'@UserName',但未提供该参数”。但我输入了除SNo(标识列)和Vendor_ID(计算列)之外的所有必填字段。此问题的解决方案是什么?我还希望在插入后在消息框中显示“供应商ID”C# 程序或功能';usp用户信息2';应为参数'@用户名';,这是没有提供的,c#,asp.net,sql,C#,Asp.net,Sql,我正在使用ASP.NET 4.0和SQL Server 2008 R2。我想使用存储过程为“用户注册”网页插入数据。每当我插入数据时,错误显示为“过程或函数'usp_User_Info2'需要参数'@UserName',但未提供该参数”。但我输入了除SNo(标识列)和Vendor_ID(计算列)之外的所有必填字段。此问题的解决方案是什么?我还希望在插入后在消息框中显示“供应商ID” CREATE TABLE User_Info2 ( SNo int Identity (
CREATE TABLE User_Info2
(
SNo int Identity (2000,1) ,
Vendor_ID AS 'VEN' + CAST(SNo as varchar(16)) PERSISTED PRIMARY KEY,
UserName VARCHAR(16) NOT NULL,
User_Password VARCHAR(12) NOT NULL,
User_ConPassword VARCHAR(12) NOT NULL,
User_FirstName VARCHAR(25) NOT NULL,
User_LastName VARCHAR(25) SPARSE NULL,
User_Title VARCHAR(35) NOT NULL,
User_EMail VARCHAR(35) NOT NULL,
User_PhoneNo VARCHAR(14) NOT NULL,
User_MobileNo VARCHAR(14)NOT NULL,
User_FaxNo VARCHAR(14)NOT NULL,
UserReg_Date DATE DEFAULT GETDATE()
)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_User_Info2]
@UserName VARCHAR(30),
@User_Password VARCHAR(12),
@User_ConPassword VARCHAR(12),
@User_FirstName VARCHAR(25),
@User_LastName VARCHAR(25),
@User_Title VARCHAR(35),
@User_OtherEMail VARCHAR(30),
@User_PhoneNo VARCHAR(14),
@User_MobileNo VARCHAR(14),
@User_FaxNo VARCHAR(14)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO User_Info2 (UserName,User_Password,User_ConPassword,User_FirstName,User_LastName,
User_Title,User_OtherEmail,User_PhoneNo,User_MobileNo,User_FaxNo)
VALUES (@UserName,@User_Password,@User_ConPassword,@User_FirstName,@User_LastName,
@User_Title,@User_OtherEMail,@User_PhoneNo,@User_MobileNo,@User_FaxNo)
END
protected void BtnUserNext_Click(object sender, EventArgs e)
{
SqlConnection SqlCon = new SqlConnection(GetConnectionString());
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "usp_User_Info2";
cmd.Parameters.Add("@User_Email", SqlDbType.VarChar).Value = txtUserName.Text.Trim();
cmd.Parameters.Add("@User_Password",SqlDbType.VarChar).Value = txtRegPassword.Text;
cmd.Parameters.Add("@User_ConPassword",SqlDbType.VarChar).Value = txtRegConPassword.Text;
cmd.Parameters.Add("@User_FirstName",SqlDbType.VarChar).Value = txtRegFName.Text.Trim();
cmd.Parameters.Add("@User_LastName",SqlDbType.VarChar).Value = txtRegLName.Text.Trim();
cmd.Parameters.Add("@User_Title",SqlDbType.VarChar).Value = txtRegTitle.Text.Trim();
cmd.Parameters.Add("@User_OtherEmail", SqlDbType.VarChar).Value = txtOtherEmail.Text;
cmd.Parameters.Add("@User_PhoneNo",SqlDbType.VarChar).Value = txtRegTelephone.Text;
cmd.Parameters.Add("@User_MobileNo", SqlDbType.VarChar).Value = txtRegMobile.Text.Trim();
cmd.Parameters.Add("@User_FaxNo", SqlDbType.VarChar).Value = txtRegFax.Text.Trim();
cmd.Connection = SqlCon;
try
{
SqlCon.Open();
cmd.ExecuteScalar();
}
finally
{ string url = "../CompanyBasicInfo.aspx?Parameter=" + Server.UrlEncode
("+ Vendor_ID +");
ClientScript.RegisterStartupScript(this.GetType(), "callfunction",
"alert('Login created successfully for "+ Vendor_ID +"');
window.location.href = '" + url + "';", true);
SqlCon.Close();
}
}
应该是:
cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = txtUserName.Text.Trim();
要获取标识列,请在存储过程的底部添加以下内容:
SELECT SCOPE_IDENTITY() 'Id'
并从ExecuteScalar
获取值:
Vendor_ID = "VEN" + ((int)cmd.ExecuteScalar()).ToString();
您只回答了一半的问题(参数问题为+1),不完全确定另一半是什么。“如何从存储过程中获取标识列?”maybeAS Manatherin说,您只回答了我的第一个问题。谢谢。如何在消息框中显示“供应商ID”?它不是Identity列?因为它是基于Identity列的,所以可以将它添加到字符串中。我没有看到任何与消息框相关的代码,所以请您再详细说明一下。客户端消息框?是。如何获取供应商ID?最后{string url=“../CompanyBasicInfo.aspx”参数=“+Server.UrlEncode(“+Vendor\u ID+”);ClientScript.RegisterStartupScript(this.GetType(),“callfunction”,“alert(“+Vendor\u ID+”)成功创建的登录名);window.location.href=“+url+”;”,true);SqlCon.Close()}为什么要存储已确认的密码?要么匹配,要么不匹配。并阅读有关密码哈希的内容。
Vendor_ID = "VEN" + ((int)cmd.ExecuteScalar()).ToString();