我是编程新手,我是用Visual Studio编程的。我试图从用户那里获得一个输入(像google.com这样的网站的名称)并向我的桌面搜索网站名称(我有不同的域名表,例如.com,.org等)。
所以,我试图编写这个存储过程,从没有实际表名的表中选择(我试图将表名从输入传递到存储过程)这里是我的存储过程:
CREATE PROCEDURE test
@link nvarchar(50)
AS
SELECT *
FROM @link
我已定义linksg
(设置和获取),如下所示:
public string linksg
{
get { return link; }
set { link = value; }
}
这就是我在函数中定义linksg
的方式(我的search_sitedomain
函数采用类似.com的域名,并提供指向包含.com表格等网站名称的表格的链接:
public void search_sitedomain()
{
SqlConnection con = new SqlConnection("Data Source=SM;Initial Catalog=mohandesi-net;Integrated Security=True;Pooling=False");
SqlCommand cmd = new SqlCommand("search_sitedomain", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@domain", domain);
con.Open();
string link = Convert.ToString(cmd.ExecuteScalar());
linksg = link;
MessageBox.Show(link);
}
search_sitedomain
函数完全正常并返回链接,但我的存储过程无法正常工作,因为它无法用表名替换@link
(如.com)
那么我做错了什么?
答案 0 :(得分:1)
在我看来,有一个参数化的表名是一个巨大的安全漏洞,但它可以这样做:
CREATE PROCEDURE test
@link nvarchar(50)
AS
EXEC ('SELECT * FROM dbo.['+@link+']');