【发布时间】:2012-01-05 03:57:06
【问题描述】:
我有一个包含一些表名的下拉列表。选择更改时,GridView也应相应地反映更改。
我可以想到一种可能可行的方法 - 使用存储过程并将参数作为表名提供。
但我也想知道是否还有其他方法可以实现这一点,好吧,最好不要编写太多代码。有任何想法吗?谢谢
【问题讨论】:
标签: c# asp.net sqldatasource
我有一个包含一些表名的下拉列表。选择更改时,GridView也应相应地反映更改。
我可以想到一种可能可行的方法 - 使用存储过程并将参数作为表名提供。
但我也想知道是否还有其他方法可以实现这一点,好吧,最好不要编写太多代码。有任何想法吗?谢谢
【问题讨论】:
标签: c# asp.net sqldatasource
我倾向于同意,在上面的两个示例中,存储过程方法都比构造 SQL 更可取。
虽然在这种情况下并不可怕,但您正在通过网络发送完整的查询,这是不可取的。此外,您还可以保护对表本身的直接访问,但授予对 SPROC 的访问权限,这样您就可以向某些用户组提供此列表功能,而不允许他们直接访问。
我建议在存储过程中使用 CASE 语句而不是构造 SQL。这将保证您只支持您知道的表格,并禁止任何滥用系统的行为。
【讨论】:
作为一种替代方法,您可以动态设置 Sqldatasource 的 select 命令。您需要设置 SelectCommandType="Text" 并使用如下代码:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (DropDownList1.SelectedValue.ToString())
{
case "TABLE1":
SqlDataSource1.SelectCommand = "Select fieldName from TABLE1";
break;
case "TABLE2":
SqlDataSource1.SelectCommand = "Select fieldName from TABLE2";
break;
default:
SqlDataSource1.SelectCommand = "Select fieldName from TABLE";
break;
}
}
【讨论】: