SQL Server:执行存储过程问题



我正在尝试执行一个存储过程,我一直得到一个错误:

过程或函数'dynamictable'期望参数'@tablename',该参数未提供

你能修改我的代码吗?

conn.Open();    
SqlCommand search = new SqlCommand("dbo.dynamictable", conn);
search.CommandType = CommandType.StoredProcedure;
search.Parameters.Add(new SqlParameter("@tablename", table));
search.Parameters.Add(new SqlParameter("width", housewidth.ToString()));

这是查询,如果它可以帮助你帮助我:

CREATE PROCEDURE dynamictable
(@tablename nvarchar(100), @width nvarchar(50))
AS
BEGIN
DECLARE @SQL nvarchar(max)
SELECT @SQL = 'SELECT * FROM [' + @tablename+ '] WHERE [Width] = '+ @width;
EXEC sp_executesql @SQL
END

如果table为null,则您将获得该消息。

你应该指定参数的类型和大小:

search.Parameters.Add(new SqlParameter("@tablename", SqlDbType.NVarChar, 128).Value = table;
search.Parameters.Add(new SqlParameter("@width", SqlDbType.Int).value = housewidth;

您当前的查询也有SQL注入的风险。即使在动态部分,也应该使用适当的参数化和转义:

CREATE procedure dynamictable
(@tablename nvarchar(128), @width int)
as
begin
declare @SQL nvarchar(max) =
N'SELECT * FROM ' + QUOTENAME(@tablename) + ' WHERE [Width] = @width;';
exec sp_executesql @SQL, N'@width int', @width = @width;
end

去掉"@"从参数名传递

search.Parameters.Add(new SqlParameter("tablename", table));

'过程或函数'dynamictable'期望参数'@tablename',该参数未提供。'

该错误通常意味着c#变量table为空。您的存储过程似乎没有任何相关问题。(你提到'@'这是额外的-所以技术上,tablename还没有设置…(:)

最新更新