C#中的StoredProcedure,从文本框传递参数

我有一个非常简单的页面,想知道如何将文本框中的数据传递到我的程序中。 我将新的参数从后面的代码传递到DB,我有一个新的代码页面

       


<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="" SelectCommand="SELECT * FROM [Employee]">

和aspx代码

 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.SqlClient; using System.Configuration; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } string connectionString = ConfigurationManager.ConnectionStrings["TicketsConnectionString"].ConnectionString; protected void Button1_Click(object sender, EventArgs e) { DataSet ds = new DataSet(); SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand("InsertIntoEmployee", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = LastName.Text; cmd.Parameters.Add("@FirstName", SqlDbType.VarChar); cmd.Parameters.Add("@Phone1", SqlDbType.VarChar); cmd.Parameters.Add("@Phone2", SqlDbType.VarChar); cmd.Parameters["@LastName"].Value = LastName.Text; cmd.Parameters["@FirstName"].Value = FirstName.Text; cmd.Parameters["@Phone1"].Value = Phone1.Text; cmd.Parameters["@Phone2"].Value = Phone2.Text; con.Open(); cmd.ExecuteNonQuery(); con.Close(); } } 

web.config看起来像这样

            

当我将简单数据传递给我的prosedure时,它会抛出错误

 An SqlParameter with ParameterName '@LastName' is not contained by this SqlParameterCollection. 

如何解决这个问题? 因为在数据库方面,程序运行得很完美。在我真正开始之前我已经开始了。 我修复了以前的问题,但在另一个问题

 The string was not recognized as a valid DateTime. There is an unknown word starting at index 0. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.FormatException: The string was not recognized as a valid DateTime. There is an unknown word starting at index 0. Source Error: Line 34: cmd.Parameters["@Phone2"].Value = Phone2.Text; Line 35: con.Open(); Line 36: cmd.ExecuteNonQuery(); Line 37: con.Close(); Line 38: 

我使用的程序

 procedure InsertIntoEmployee @LastName Nvarchar (25) , @FirstName Nvarchar (25) , @Phone1 Nvarchar (25) , @Phone2 Nvarchar (25) as insert into Employee (LastName , FirstName,Phone1,Phone2)values (@LastName,@FirstName,@Phone1,@Phone2); 

当我在Db方面运行prosedure,如EXEC InsertIntoEmployee N'петров', N'петр', 99999999,null它运行完美但是从asp.net方面它的投掷错误

试试这个

 protected void Button1_Click(object sender, EventArgs e) { DataSet ds = new DataSet(); SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand("InsertIntoEmployee", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@LastName", SqlDbType.NVarChar(MAX)).Value = LastName.Text; cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar(MAX)).Value = FirstName.Text; cmd.Parameters.Add("@Phone1", SqlDbType.NVarChar(MAX)).Value = Phone1.Text; cmd.Parameters.Add("@Phone2", SqlDbType.NVarChar(MAX)).Value = Phone2.Text; con.Open(); cmd.ExecuteNonQuery(); con.Close(); // gvQuarterlyReport.DataBind(); } 

如果我错了,请纠正我,但似乎这一行

 cmd.Parameters.Add("@LastName ", SqlDbType.Date); 

LastName之后有一个额外的空格。 应该是吗?

 cmd.Parameters.Add("@LastName", SqlDbType.Date); 

代替?

您需要从“@LastName”中删除空格

就像是

 cmd.Parameters.Add("@LastName", SqlDbType.Date); 

但这只会将错误转移到嵌套行,因为@FirstName也不在参数列表中。

事实上,在你拥有正确的@LastName之后

这三条线都会引起问题

 cmd.Parameters["@FirstName"].Value = FirstName.Text; cmd.Parameters["@Phone1"].Value = Phone1.Text; cmd.Parameters["@Phone2"].Value = Phone2.Text 

当然,关于空间的其他答案是正确的。 请注意,如果您立即分配参数值,可以避免此类问题(或者至少让它们始终错误;-),如下所示:

 cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = LastName.Text; 

此外,您使用SqlDbType.Date作为@LastName参数。 除非你有一个非常奇怪的架构,否则很可能是错误的。 因此,我在上面使用了SqlDbType.VarChar