我正在尝试使用文本框和搜索按钮搜索GridView。我想我需要一个类似
的查询SELECT employeeID, name, position, hourlyPayRate
FROM dbo.employee
WHERE name LIKE 'textBox1.text+'
我使用visual studio 2013中的查询设计器进行了查询。
然后我有一个像这样的事件处理程序
private void btnSearch_Click(object sender, EventArgs e)
{
this.employeeTableAdapter.FillBy(this.personnelDataSet.employee);
}
我确信问题出在查询中,但我不知道如何将文本框的值包含在查询中。
答案 0 :(得分:1)
要更改您的查询,它应该如下所示:
string textboxValue = textbox1.Text;
string query = "SELECT employeeID, name, position, hourlyPayRate " +
"FROM dbo.employee " +
"WHERE name LIKE '" + textboxValue + "'";
但这很容易受到SQL注入攻击,你应该使用SqlCommand parameters:
string commandText = "SELECT employeeID, name, position, hourlyPayRate " +
"FROM dbo.employee WHERE name LIKE '%'+ @Name + '%'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
//Create a SqlCommand instance
SqlCommand command = new SqlCommand(commandText, connection);
//Add the parameter
command.Parameters.Add("@Name", SqlDbType.VarChar, 20).Value = textbox1.Text;
//Execute the query
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch
{
//Handle exception, show message to user...
}
finally
{
connection.Close();
}
}
<强>更新强>
要在点击按钮时执行此代码,请将代码放在此处(确保您有一个名为YourButton
的按钮):
private void YourButton_Click(object sender, EventArgs e)
{
//Place above code here
}
<强> UPDATE2:强>
您应该在SqlConnection中使用连接字符串,此字符串可能类似于:
string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
在这里,您必须将以my
开头的值替换为您自己的值。有关SQL Server的连接字符串的更多信息/示例:
答案 1 :(得分:1)
正如makambi已经说过的那样。你不应该那样做,因为你正在打开SQL注入的大门。而是使用这样的参数化查询:
SqlCommand cmd = new SqlCommand("SELECT employeeID, name, position, hourlyPayRate FROM dbo.employee WHERE name LIKE @name", connection);
cmd.Parameters.Add("@name", textBox1.Text);
connection.Open();
cmd.ExecuteNonQuery();
或使用存储过程。
答案 2 :(得分:1)
作为未成年人;这是一个有效的方法,展示了如何避免DataTable
等的开销,以及简单但安全有效的参数化和实现:
public class Employee {
public int EmployeeID {get;set;}
public string Name {get;set;}
public string Position {get;set;}
public decimal HourlyPayRate {get;set;}
}
...
// uses the "dapper" tool to provide the Query<T> extension method;
// freely available from NuGet: PM> Install-Package Dapper
var employees = connection.Query<Employee>(@"
SELECT employeeID, name, position, hourlyPayRate
FROM dbo.employee
WHERE name LIKE @pattern",
new { pattern = "%" + textBox1.Text + "%" }).ToList();
grid.DataSource = employees;
答案 3 :(得分:0)
如果我理解正确,你手动构建你的SQL查询。使用纯字符串连接执行此操作是一种不好的做法,因为它可以进行SQL注入,而应该使用SqlCommand语法并在其中添加SqlParameters。
using (var sqlConnection = new SqlConnection("connection"))
{
var commandText = "SELECT employeeID, name, position, hourlyPayRate FROM dbo.employee WHERE name LIKE @name";
using (var sqlCommand = new SqlCommand(commandText, sqlConnection))
{
sqlCommand.Parameters.Add("@salary", SqlDbType.Money).Value = textBox1.text;
}
}
它没有经过实际测试,它可能无法正常工作,但它描述和想法。您只需添加所需的sql类型的参数,请在此处查看更多示例:When should "SqlDbType" and "size" be used when adding SqlCommand Parameters?
答案 4 :(得分:0)
where子句应该是WHERE name LIKE textBox1.text +'rest of query'
但是正如makambi所提到的那样,你构建查询的方式可以打开你的sql注入