oracle语法:从文本框中选择值作为asp.net中的表名

时间:2016-02-25 13:09:17

标签: c# asp.net oracle

用户可以从下拉列表中选择视图名称,然后将其值存储在" 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快速版

2 个答案:

答案 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();

            }
}