从文本框中选择数据库值

时间:2013-06-19 21:24:09

标签: c# sql sql-server

我有一个列表框,其中“firstname”和“lastname”存储在数据库中。

如何编写查询以从数据库中检索选择索引的信息。

我有

"Select * from table where firstname= '"+listbox1.Text+"' and lastname= '"+listbox1.Text+"' "

不要工作

3 个答案:

答案 0 :(得分:1)

除了SQL Injection漏洞之外,你看起来是一个好的开始。我会阅读参数化查询。 This is an article我认为这个概念很好。

您将最终使用SqlConnection,SqlCommand,SqlParameter以及其他一些类的组合。

答案 1 :(得分:1)

两个字(两种方式):Parameterized QueriesPrepared Statements。你所说的取决于你喜欢哪种 - 它们的意思完全相同!使用它们有性能和安全性方面的好处。

我假设通过我在你的问题中读到的内容,这就是你所拥有的。您的listbox控件只包含数据库中的名称列表,这些名称仅包含在Items中的listbox

My interpretation

这不是一个明智的设计,但是让它在没有你已经拥有的东西的重做的情况下运行。

对于SQL ServerC#,代码如下:

string commandText = "SELECT * FROM table WHERE firstname = @firstname and lastname = @lastname";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(commandText, connection);
    if (listbox1.SelectedItem == null)
    {
         // exit since nothing was selected in the listbox to query by
    }
    var names = listbox1.SelectedItem.ToString().Split(' ');
    if (names.Length != 2)
    {
         // exit since this is not what we want and will yield unexpected results
    }
    string firstName = names[0];
    string lastName = names[1];
    command.Parameters.AddWithValue("@firstname", firstname);
    command.Parameters.AddWithValue("@lastname", lastname);

    // Read information from database...

}

显然,您可以看到为什么这不是一个明智的设计选择,但它可以根据您已经设置的内容工作。

答案 2 :(得分:0)

使用LINQ to SQL时,这里是“where”...

<asp:LinqDataSource 
            ContextTypeName="YourDataContext" 
            TableName="YourTable" 
            ID="DataSource" 
            runat="server"
            Where="FirstName == @FN">
            <WhereParameters>
                <asp:ControlParameter Name="FN" ControlID="LISTBOX"
                                      Type="String" PropertyName="Text" />
            </WhereParameters>
</asp:LinqDataSource>