C# SQL Server:执行存储过程问题

C# SQL Server:执行存储过程问题,c#,sql,sql-server,tsql,C#,Sql,Sql Server,Tsql,我正在尝试执行一个存储过程,但不断出现错误: 过程或函数“dynamictable”需要未提供的参数“@tablename” 你能修好我的密码吗 conn.Open(); SqlCommand search = new SqlCommand("dbo.dynamictable", conn); search.CommandType = CommandType.StoredProcedure; search.Parameters.Add(new SqlParameter

我正在尝试执行一个存储过程,但不断出现错误:

过程或函数“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

在传递参数名称时,从参数名称中删除@

search.Parameters.Add(new SqlParameter("tablename", table));
'过程或函数'dynamictable'需要未提供的参数'@tablename'

该错误通常意味着名为table的C变量为null。您的存储过程似乎没有任何相关问题。您提到的“@”是额外的-因此从技术上讲,tablename尚未设置..:

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

您确实应该指定参数的类型和大小:

search.Parameters.AddnewSqlParameter@tablename,SqlDbType.NVarChar,128.Value=table; search.Parameters.AddnewSqlParameter@width,SqlDbType.Int.value=houseidth; 您当前的查询也有SQL注入的风险。即使在动态部件中,也应使用适当的参数化和转义:

创建动态过程 @表名nvarchar128,@width int 像 开始 声明@SQL nvarcharmax= 从“+QUOTENAME@tablename+'其中[Width]=@Width;'; exec sp_executesql@SQL,N'@width int',@width=@width; 终止
您使用的是哪种数据库管理系统?这段代码是特定于产品的。我必须质疑有多少表的列名为width。这种方法有一个缺点。我试过你的方法,但结果还是一样error@ThanhLamChi尝试在sq服务器上运行命令时更新该命令。e、 g SqlCommandexec dbo.dynamictable附件名,atwidth,conn;非常感谢。我发现了我的错误。