如何在asp.net中存储参数以便与sql一起使用?

时间:2013-07-02 14:10:31

标签: asp.net mysql visual-studio-2012

我正在使用Visual Studio 2012和MySQL构建我的第一个网站。这是我第一次真正使用它们中的任何一种,所以我的知识缺乏,但我正慢慢地把它拿起来。

我正在尝试开发一个网站,用于我们的工作中的锁定/挂牌数据库。它最终将能够自动生成报告/标签,但我还没有达到目前的水平。我希望能够做的是提供两个下拉列表,一个用于复合,另一个用于机器(这些将用于对给定设备进行排序)。当用户选择特定的复合体时,我希望机器下拉列表仅限于特定于该复合体的机器。例如,我的SQL查询看起来像这样:

SELECT * FROM machine WHERE complex_id = complex.complex_id ORDER BY machine_name;

为了比较machine.complex_id和complex.complex_id,我认为使用参数是正确的方法。

SELECT * FROM machine WHERE complex_id = @compid ORDER BY machine_name;

但是,我在SQL语句中使用参数了。查看了以下页面:MSDN,我能够弄清楚如何在SQL语句中使用参数。但是,我不清楚如何实际创建参数。即使经过大量的谷歌搜索,我也没有找到任何真正突出的东西作为我想要实现的目标的正确方法。

修改

<%@ Page Title="Lockout" Language="VB" MasterPageFile="~/Site.Master" 
AutoEventWireup="true" CodeBehind="Lockout.aspx.vb" Inherits="Lockout.Lockout" %>

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">

<asp:DropDownList 
    ID="DropDownList_Complex" 
    runat="server" 
    DataTextField="complex_name"
    DataSourceID="SqlDataSource_Complex" 
    DataValueField="complex_id" 
    AutoPostBack="True" 
    AppendDataBoundItems="True">
    <asp:ListItem Value="" Selected="True">
        Select
    </asp:ListItem>
</asp:DropDownList>

<asp:DropDownList
    ID="DropDownList_Machine"
    runat="server"
    DataTextField="machine_name"
    DataSourceID="SqlDataSource_Machine"
    DataValueField="machine_id"
    AutoPostBack="True"
    AppendDataBoundItems="true">
    <asp:ListItem Value="" Selected="True">
        Select
    </asp:ListItem>
</asp:DropDownList>

<asp:SqlDataSource 
    ID="SqlDataSource_Complex" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:lockoutConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:lockoutConnectionString.ProviderName %>" 
    SelectCommand="SELECT complex_id, complex_name FROM complex ORDER BY complex_name">
</asp:SqlDataSource>

<asp:SqlDataSource
    ID="SqlDataSource_Machine"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:lockoutConnectionString %>"
    ProviderName="<%$ ConnectionStrings:lockoutConnectionString.ProviderName %>"
    SelectCommand="SELECT machine_id, machine_name, complex_id FROM machine ORDER BY machine_name">
</asp:SqlDataSource>

1 个答案:

答案 0 :(得分:1)

您想在ControlParameter(填充您的机器下拉列表的那个)中使用SqlDataSource,指向您提到的第一个下拉列表(复杂的下拉列表)。像这样:

<asp:SqlDataSource
    ID="SqlDataSource_Machine"
    runat="server"
    ConnectionString="<%$ ConnectionStrings:lockoutConnectionString %>"
    ProviderName="<%$ ConnectionStrings:lockoutConnectionString.ProviderName %>"
    SelectCommand="SELECT machine_id, machine_name, complex_id FROM machine WHERE complex_id=@complex_id ORDER BY machine_name">
    <SelectParameters>
        <asp:ControlParameter Name="complex_id" ControlId="DropDownList_Complex" PropertyName="SelectedValue"/>
    </SelectParameters>
</asp:SqlDataSource>

这样,当您在DropDownList_Complex中选择一个值时,它会自动填充填充下一个下拉列表的查询的参数。

请注意,您可能希望在DropDownList_Complex上将“AutoPostBack”设置为true(以自动重新加载)。