我意识到还有不少其他人发布了类似的问题,但我似乎无法找到一个相当重要的问题。企业库“过程或函数期望没有提供的参数”错误
我有一个简单的存储过程执行插入:
ALTER PROCEDURE [dbo].[usp_CategoryTreeInsert]
@CategoryId Int,
@InvenexNodeId Int,
@ParentNodeId Int,
@NodeId Int,
@Node nvarchar(max),
@NodeQuery nvarchar(max)
AS
BEGIN
BEGIN TRANSACTION
INSERT INTO dbo.CategoryTree(
CategoryId,
InvenexNodeId,
ParentNodeId,
NodeId,
Node,
NodeQuery
)VALUES(
@CategoryId,
@InvenexNodeId,
@ParentNodeId,
@NodeId,
@Node,
@NodeQuery
)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
Return -1
END
ELSE
BEGIN
COMMIT TRANSACTION
RETURN 1
END
END
我打电话这个程序了使用企业数据访问应用程序块如下一个类库。
(注:我通常使用SqlParameter[]
,而不是这种方法,但是这应该是一个“快速和肮脏”)
SqlCommand Cmd = new SqlCommand("usp_CategoryTreeInsert");
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Parameters.Add("@CategoryId",SqlDbType.Int, Convert.ToInt32(Dt.Rows[CurrentRow]["CategoryId"]));
Cmd.Parameters.Add("@InvenexNodeId",SqlDbType.Int, Convert.ToInt32(Dt.Rows[CurrentRow]["InvenexNodeId"]));
Cmd.Parameters.Add("@ParentNodeId",SqlDbType.Int, Convert.ToInt32(Dt.Rows[CurrentRow]["ParentNodeId"]));
Cmd.Parameters.Add("@NodeId",SqlDbType.Int, Convert.ToInt32(Dt.Rows[CurrentRow]["NodeId"]));
Cmd.Parameters.AddWithValue("@Node", Dt.Rows[CurrentRow]["Node"]);
Cmd.Parameters.AddWithValue("@NodeQuery", Dt.Rows[CurrentRow]["NodeQuery"]);
Database Db = DatabaseFactory.CreateDatabase("DefaultConnection");
Db.ExecuteNonQuery(Cmd);
返回的错误是
过程或函数期望参数“@CategoryId”哪些不提供
我有一个关于SqlCommand
“Cmd”的手表,以及所有的参数值,看起来都是正确命名,输入和填充。
我认为这是一个相对简单的事情,一个新鲜的眼睛可以很快指出。
任何人都可以帮忙吗?
非常感谢!
编辑:解
如斯利拉姆指出的,我在过载已经把预定的参数值不正确。
改正的代码如下:
SqlCommand Cmd = new SqlCommand("usp_CategoryTreeInsert");
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Parameters.Add("@CategoryId",SqlDbType.Int);
Cmd.Parameters["@CategoryId"].Value = Convert.ToInt32(Dt.Rows[CurrentRow]["CategoryId"]);
Cmd.Parameters.Add("@InvenexNodeId",SqlDbType.Int);
Cmd.Parameters["@InvenexNodeId"].Value = Convert.ToInt32(Dt.Rows[CurrentRow]["InvenexNodeId"]);
Cmd.Parameters.Add("@ParentNodeId",SqlDbType.Int);
Cmd.Parameters["@ParentNodeId"].Value = Convert.ToInt32(Dt.Rows[CurrentRow]["ParentNodeId"]);
Cmd.Parameters.Add("@NodeId",SqlDbType.Int);
Cmd.Parameters["@NodeId"].Value = Convert.ToInt32(Dt.Rows[CurrentRow]["NodeId"]);
Cmd.Parameters.AddWithValue("@Node", Dt.Rows[CurrentRow]["Node"]);
Cmd.Parameters.AddWithValue("@NodeQuery", Dt.Rows[CurrentRow]["NodeQuery"]);
Database Db = DatabaseFactory.CreateDatabase("DefaultConnection");
Db.ExecuteNonQuery(Cmd);
感谢这么多的疯狂快速回复斯利拉姆!
完美...我不敢相信我没有看到。 – CHSIndependet