如何从另一个行值读取SQL数据库特定的行文本

时间:2013-01-26 22:45:21

标签: asp.net sql database

我正在尝试查询来自另一列的特定列文本的数据。

基本上,我有一个供应商数据库,其中包含SupplierID和Country列。

我已经拥有该特定行的SupplierID,例如,它是14.我想根据14值获取Country列的文本值。

我通过以下代码(列表框)获得的供应商ID:

<asp:ListBox ID="SupplierListBox" runat="server" 
            DataSourceID="SupplierCompanyDataSource" DataTextField="Company" 
            DataValueField="SupplierID" Width="315px" 
            Height="80px" 
            onselectedindexchanged="SupplierListBox_SelectedIndexChanged" 
            AutoPostBack="True"></asp:ListBox>

代码:

        string SupplierListvalue = SupplierListBox.SelectedItem.Value; //SupplierListvalue retrieves the SupplierID value

        SqlDataReader rdr = null;
        SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=ROG;Integrated Security=True");
        SqlCommand cmd = new SqlCommand("select Country from SupplierDB", conn);
        cmd.Connection = conn;

        conn.Open();
        rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            TextBox1.Text = rdr["Country"].ToString();
            MessageBox.Show("Connection Successful");
            MessageBox.Show(rdr.ToString());
        }

        conn.Close();

3 个答案:

答案 0 :(得分:2)

嗯,目前还不清楚主要问题是什么,所以我将向您展示一个使用ADO.NET从数据库中选择Country列的工作示例,使用Parameters来避免SQL注入和{{1} } -statement以确保所有非托管资源作为连接被处置(关闭)。

using

答案 1 :(得分:0)

您需要研究使用参数化查询。试试这个:

    string SupplierListvalue = SupplierListBox.SelectedItem.Value; //SupplierListvalue retrieves the SupplierID value
    ...
    SqlCommand cmd = new SqlCommand("select Country from SupplierDB WHERE SupplierID = @supplierId", conn);
    cmd.Parameters.AddWithValue("@supplierId", SupplierListvalue);
    ...
祝你好运。

答案 2 :(得分:0)

我正以错误的方式接近它。基本上以下是正确的代码:

<asp:SqlDataSource ID="SupplierCompanyDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ROGConnectionString %>"
SelectCommand="SELECT [Company], [SupplierID] FROM [SupplierDB] WHERE ([SupplierID] &gt;= @SupplierID)"> <SelectParameters> <asp:Parameter DefaultValue="14" Name="SupplierID" Type="Int32" /></SelectParameters> </asp:SqlDataSource>

<asp:SqlDataSource ID="SupplierCountryDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ROGConnectionString %>" SelectCommand="SELECT [SupplierID], [Country] FROM [SupplierDB] WHERE ([SupplierID] = @SupplierID)"> <SelectParameters> <asp:ControlParameter ControlID="SupplierListBox" Name="SupplierID" PropertyName="SelectedValue" Type="Int32" /></SelectParameters></asp:SqlDataSource>

这就是工作!所以现在当我点击listbox1时,listbox2也会被点击,类似于级联。