用户可以从下拉列表中选择视图名称,然后将其值存储在" TextBoxTable.Text"中。
<asp:DropDownList ID="ddSelect_table" runat="server" Width="200px" AutoPostBack="false" AppendDataBoundItems="true" OnSelectedIndexChanged="ddSelect_table_SelectedIndexChanged" >
<asp:ListItem Text="SELECT TABLE" Value=""></asp:ListItem>
<asp:ListItem Text="VIEW_RES_ALOC_20" Value="VIEW_RES_ALOC_20"></asp:ListItem>
<asp:ListItem Text="VIEW_RES_ALOC_30DAYS" Value="VIEW_RES_ALOC_30DAYS"></asp:ListItem>
<asp:ListItem Text="VIEW_RES_ALOC_7DAYS" Value="VIEW_RES_ALOC_7DAYS"></asp:ListItem>
<asp:ListItem Text="VIEW_RES_ALOC_8DAYS" Value="VIEW_RES_ALOC_8DAYS"></asp:ListItem>
<asp:ListItem Text="VIEW_RES_ALOC_TO" Value="VIEW_RES_ALOC_TO"></asp:ListItem>
<asp:ListItem Text="VIEW_RES_ALOC_WARINC" Value="VIEW_RES_ALOC_WARINC"></asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="TextBoxTable" runat="server"></asp:TextBox>
protected void ddSelect_table_SelectedIndexChanged (object sender, EventArgs e)
{
TextBoxTable.Text = ddSelect_table.SelectedItem.Value;
}
将数据库表用作文本框值的语法是什么? SelectCommand =&#34; select * from&#39;,@ TextBoxTable,&#39;
使用visualstudio 2013 oracle数据库11g快速版
答案 0 :(得分:0)
我认为您不能将模式对象名称的参数用于值。因此,您必须连接实际名称。这意味着 小心 。
不要在SQL查询字符串中使用实际用户输入。而是拥有一个预定义的可能值列表,您可以在服务器端代码中控制这些值。 (用于填充DropDownList
的相同列表可以很好地执行。)检查输入是否与列表中的项匹配,如果匹配,则使用列表中的项。如果它没有显示错误。
例如,您可能在代码隐藏中有一个简单的列表:
var viewNames = new List<string>
{
"VIEW_RES_ALOC_20",
"VIEW_RES_ALOC_30DAYS",
"VIEW_RES_ALOC_7DAYS",
"VIEW_RES_ALOC_8DAYS",
"VIEW_RES_ALOC_TO",
"VIEW_RES_ALOC_WARINC"
};
不要将ListItem
直接放在标记中,只需将控件绑定到该列表:
ddSelect_table.DataSource = viewNames;
ddSelect_table.DataBind();
然后,当用户选择一个值时,验证它。简单的事情:
string viewName;
if (viewNames.Contains(ddSelect_table.SelectedValue))
viewName = viewNames.Single(n => n.Equals(ddSelect_table.SelectedValue));
else
// error
然后,您最终只使用查询中匹配的值:
var sql = string.Format("SELECT * FROM {0}", viewName);
代码中存在小位偏执狂,即使已确定两者已匹配,也始终使用服务器端值而不是用户提供的值。但在这种情况下,一点点的偏执是好的。在SQL注入方面,保持永不信任用户输入的规则。只要作为SQL代码执行的唯一内容总是来自你而不是来自用户,那么你就是好的。
然后将其值存储在&#34; TextBoxTable.Text&#34;
中
由于用户已经在一个控件中选择了值,因此它只是在第二个控件中复制了值,因此不清楚为什么要这样做。但这个概念是一样的。验证您从用户那里获得的任何输入。如果您输入两次输入,请对其进行两次验证。
答案 1 :(得分:0)
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
ddl.Items.Add(new ListItem("---",""));
ddl.AppendDataBoundItems = true;
String conStr = ConfigurationManager.ConnectionStrings["ConnectionString3"].ConnectionString;
string queryStr = "SELECT CAMPAIGN_ID, NAME FROM CAMPAIGN_INFO";
OracleConnection conn = new OracleConnection(conStr);
OracleCommand cmd = new OracleCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = queryStr;
cmd.Connection = conn;
try
{
conn.Open();
OracleDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
ListItem li = new ListItem();
li.Value = rdr["CAMPAIGN_ID"].ToString();
li.Text = rdr["CAMPAIGN_ID"].ToString() +" - "+ rdr["NAME"].ToString();
ddl.Items.Add(li);
}
}
catch (Exception)
{
conn.Close();
conn.Dispose();
}
}