我有一个列表框,其中“firstname”和“lastname”存储在数据库中。
如何编写查询以从数据库中检索选择索引的信息。
我有
"Select * from table where firstname= '"+listbox1.Text+"' and lastname= '"+listbox1.Text+"' "
不要工作
答案 0 :(得分:1)
除了SQL Injection漏洞之外,你看起来是一个好的开始。我会阅读参数化查询。 This is an article我认为这个概念很好。
您将最终使用SqlConnection,SqlCommand,SqlParameter以及其他一些类的组合。
答案 1 :(得分:1)
两个字(两种方式):Parameterized Queries
或Prepared Statements
。你所说的取决于你喜欢哪种 - 它们的意思完全相同!使用它们有性能和安全性方面的好处。
我假设通过我在你的问题中读到的内容,这就是你所拥有的。您的listbox
控件只包含数据库中的名称列表,这些名称仅包含在Items
中的listbox
。
这不是一个明智的设计,但是让它在没有你已经拥有的东西的重做的情况下运行。
对于SQL Server
和C#
,代码如下:
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>