Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C从select语句的下拉框中传递所选值_C#_Asp.net - Fatal编程技术网

C# 使用C从select语句的下拉框中传递所选值

C# 使用C从select语句的下拉框中传递所选值,c#,asp.net,C#,Asp.net,我有一个下拉列表,显示位置名称,下拉列表的数据源同时显示LOC_NM和LOC_ID,但用户只能看到位置名称。所以我想做的是在我的select查询中传递LOC_ID,我该怎么做? 以下是下拉列表的代码: <asp:DropDownList ID="locatioin" DataSourceID="dd_source" DataTextField="LOC_NM" DataValueField="LOC_ID" runat="server" AppendDataBoundItems="tru

我有一个下拉列表,显示位置名称,下拉列表的数据源同时显示LOC_NM和LOC_ID,但用户只能看到位置名称。所以我想做的是在我的select查询中传递LOC_ID,我该怎么做? 以下是下拉列表的代码:

<asp:DropDownList ID="locatioin"  DataSourceID="dd_source" DataTextField="LOC_NM" DataValueField="LOC_ID" runat="server" AppendDataBoundItems="true">
<asp:ListItem Text="Select Location" Value="Select Location"></asp:ListItem>
</asp:DropDownList>
正如您所看到的,我想在查询中传递所选值的LOC ID,但我遇到了问题:where Location=selected LOC_ID

SqlDataAdapter da = new SqlDataAdapter("select Company, Location from MainTable
    where Location = "+locatioin.SelectedValue+"")
您只需要使用下拉列表的selected value属性


尽管您还需要更正您的查询

moe:我希望您没有像您发布的示例那样连接SQL字符串。这种连接会遭受SQL注入攻击。我建议使用参数化查询

问候,,
Uroš

这是一个快速解决方案:

var tmp = "SELECT Company, Location FROM MainTable WHERE LocationColumn = {0}");
var query = string.Format(tmp,location.SelectedValue);
SqlDataAdapter da = new SqlDataAdapter(query);
SqlConnection conn = new SqlConnection(_connectionString);
conn.Open();
string s = "SELECT Company, Location " + 
           "FROM MainTable " +
           "WHERE LocationColumn = @location";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@location", location.SelectedValue);
SqlDataReader reader = cmd.ExecuteReader();
这是安全的解决方案:

var tmp = "SELECT Company, Location FROM MainTable WHERE LocationColumn = {0}");
var query = string.Format(tmp,location.SelectedValue);
SqlDataAdapter da = new SqlDataAdapter(query);
SqlConnection conn = new SqlConnection(_connectionString);
conn.Open();
string s = "SELECT Company, Location " + 
           "FROM MainTable " +
           "WHERE LocationColumn = @location";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@location", location.SelectedValue);
SqlDataReader reader = cmd.ExecuteReader();

最好的编码站点之一:

1。我猜是它的位置,而不是位置2。啊,你可以用引号同时使用SQL和C吗?@Weggino在原始帖子中说,这是locatioin onlynice答案,但我宁愿使用安全的解决方案,而不是快速的解决方案。@IlyaIvanov编程并不总是使用最安全的解决方案。目的描述了它应该有多安全!Weggino,在主表中,我们没有LOC_NM,但我们只有LOC_ID,因此查询筛选器必须使用LOC_ID。我们如何才能做到这一点?@moe根据您的定义,您使用的是DataValueField=LOC_ID。如果您真的这样做,SelectedValue应该可以。