如果我在id
文本字段中放置一个值,但是当我在其他文本字段中放入任何内容时,我只能从数据库中返回条目,当我确定它们在那里。
这是我的代码:
protected void SearchButton_Click(object sender, EventArgs e)
{
String commandString = "SELECT * FROM [Swim] WHERE (([First Name] LIKE '%' + @First_Name + '%') AND ([Last Name] LIKE '%' + @Last_Name + '%') AND ([Phone] LIKE '%' + @Phone + '%') AND ([id] = @id))";
//SELECT * FROM [Swim] WHERE ([Phone] LIKE '%' + @Phone + '%')
SqlCommand command = new SqlCommand(commandString, conn);
command.Parameters.Add("@First_Name", SqlDbType.NVarChar).Value = FirstNameTextBox.Text;
command.Parameters.Add("@Last_Name", SqlDbType.NVarChar).Value = LastNameTextBox.Text;
command.Parameters.Add("@id", SqlDbType.NVarChar).Value = IdTextBox.Text;
command.Parameters.Add("@phone", SqlDbType.NVarChar).Value = PhoneTextBox.Text;
conn.Open();
command.ExecuteNonQuery();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = command;
da.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
conn.Close();
}
任何建议都有帮助吗?
答案 0 :(得分:1)
认真考虑使用类似于Entity Framework的内容,而不是在代码中添加SQL文本。
我在这里猜测你想允许对一个或多个字段进行查询。
要使用Entity Framework满足您的要求并使用LINQ查询,您可以执行以下操作:
var query = db.Swims;
// ID overrides all others, since it is unique no point adding more filters unless
// you want to not return the row if the other filters don't match?
if (IdTextBox.Text.Length > 0)
{
int id = Convert.ToInt32(IdTextBox.Text);
query = query.Where(s => s.Id == id);
}
else
{
if (FirstNameTextBox.Text.Length > 0)
{
query = query.Where(s => s.FirstName.Contains(FirstNameTextBox.Text));
}
if (LastNameTextBox.Text.Length > 0)
{
query = query.Where(s => s.LastName.Contains(LastNameTextBox.Text));
}
if (PhoneTextBox.Text.Length > 0)
{
query = query.Where(s => s.Phone.Contains(PhoneTextBox.Text));
}
}
GridView1.DataSource = query.ToList();
以上将处理所有8个左右的查询组合而没有问题。
我在这里做了一些未在你的问题中明确说明的假设,让我知道如果我有任何错误,我会相应地更新答案。
答案 1 :(得分:0)
试试这个:
SELECT * FROM Swim WHERE(First_Name LIKE'%'+ @ First_Name +'%'AND Last_Name LIKE'%'+ @Last_Name +'%'和Phone LIKE'%'+ @Phone +'%')或( id = @id));
答案 2 :(得分:0)
首先,我建议将(如果可能的话)放入sql存储过程中。这更像是个人偏好,因为我更多的是在数据库方面。当我们在应用程序层和数据库层之间编写代码时,如果你必须更容易(对我来说)在两者之间存储/检索数据,那么重构存储过程就容易得多。
如果您有兴趣,我可以发布一个示例,说明如何使用c#&存储过程
至于你的问题..不应该这样:command.ExecuteNonQuery();是这样的:command.ExecuteQuery?
我使用command.ExecuteNonQuery将更新/信息发送到数据库层,并使用command.ExecuteQuery将信息提取到应用程序层。