我讨厌寻求帮助(一般来说),但也在这里,因为我的大多数问题可能很容易解决,但我是新的编程,不能过去这个错误。
我正在开发一个C#应用程序,它从.NET表单中获取用户输入并将其传递到数据库。单击一个按钮,就会调用一个方法,该方法生成一个随机ID并将其插入到数据库中的一列中,将新生成的ID存储到一个隐藏字段中,然后调用存储过程来填充webform字段中键入的其余数据。
在我开始将ID存储在隐藏字段中之前,大多数情况都很好,现在事情已经走下坡路了。现在,我得到了错误:“System.Data.SqlClient.SqlException:过程或函数“User_Add”需要参数“@ UID”,但未提供该参数。
我尝试重新排列代码,首先定位生成ID的方法,然后调用存储过程,甚至使用存储过程将ID插入表中。不管我做了什么重新排列,我仍然得到这个错误。我不知道我还应该做什么。有人有建议吗?下面是我的一些代码:为了简单起见,我已经用占位符替换了变量的实际名称和诸如此类的东西,并删除了几个参数:
public void UserDataPassage(string cnxnString)
{
using (SqlConnection cnxn = new SqlConnection(cnxnString))
{
cnxn.Open();
SqlCommand cmd = new SqlCommand("[dbo].[Users_Add]", cnxn);
// Create and prepare an SQL statement
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter item1Param = new SqlParameter("@item1", SqlDbType.NVarChar, 50);
SqlParameter item2Param = new SqlParameter("@item2", SqlDbType.NVarChar, 50);
// Check to see if values are null; pass to DB as a null value if true
try
{
if (item1Param == null)
{
item1Param.Value = DBNull.Value;
}
if (item2Param == null)
{
item2Param.Value = DBNull.Value;
}
}
catch (InvalidCastException)
{
}
// Equate the parameters to the ASP IDs created in Default.aspx
item1Param.Value = box_box1name.Text;
item2Param.Value = box_box2name.Text;
// Add values to the RBuilder database.
cmd.Parameters.Add(item1Param).ToString();
cmd.Parameters.Add(item2Param).ToString();
// Call Prepare after setting the commandtext parameters
cmd.Prepare();
// Execute the query (does not return any values);
cmd.ExecuteNonQuery();
}
}
我的存储过程如下:
USE [TestDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[User_Add]
@item1 NVARCHAR(50),
@item2 NVARCHAR(50),
@userID INT OUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [Table1] (item1, item2)
VALUES (@item1, @item2)
SET @userID= SCOPE_IDENTITY()
END
2条答案
按热度按时间hyrbngr71#
添加输出参数。您的存储过程需要3个参数。即使不使用参数,也需要提供它。
fzwojiic2#
您需要提供
@UID
参数作为输出参数ToString
似乎是多余的,cmd.Prepare()
也是不必要的。此外,检查
null
没有意义,因为检查的是实际的参数对象,它永远不会为空。