C# 在oledb命令中使用变量
在c#中使用oledb命令函数进行sql查询时,连接变量的正确方法是什么。要应用一些上下文,我试图使列表框显示的内容依赖于在上一个列表框上所做的另一个选择。这是我尝试过的,但不起作用C# 在oledb命令中使用变量,c#,sql,concatenation,oledb,C#,Sql,Concatenation,Oledb,在c#中使用oledb命令函数进行sql查询时,连接变量的正确方法是什么。要应用一些上下文,我试图使列表框显示的内容依赖于在上一个列表框上所做的另一个选择。这是我尝试过的,但不起作用 OleDbCommand projects = new OleDbCommand("SELECT * FROM Client_projects WHERE clients = " + (listBox1.SelectedItem.ToString()) , conn); OleDbDataReader
OleDbCommand projects = new OleDbCommand("SELECT * FROM Client_projects
WHERE clients = " + (listBox1.SelectedItem.ToString()) , conn);
OleDbDataReader project = projects.ExecuteReader();
while (project.Read())
{
// Add items from the query into the listbox
listBox2.Items.Add(project[1].ToString());
}
字符串连接可能会导致SQL注入问题,因此不应使用它来构建SQL。您应该参数化您的查询。所以像这样的事情
using (OleDbCommand projects = new OleDbCommand("SELECT * FROM Client_projects WHERE clients = ?", conn))
{
projects.Parameters.Add("?", OleDbType.VarChar).Value = listBox1.SelectedItem.ToString();
OleDbDataReader project = projects.ExecuteReader();
while (project.Read())
{
listBox2.Items.Add(project[1].ToString());
}
}
OleDbCommand参数是按照SQL中指定的顺序设置的,因此,如果有多个参数,则必须按顺序设置
using (OleDbCommand projects = new OleDbCommand("SELECT * FROM Client_projects WHERE clients = ? AND Date = ?", conn))
{
projects.Parameters.Add("?", OleDbType.VarChar).Value = listBox1.SelectedItem.ToString();
projects.Parameters.Add("?", OleDbType.Date).Value = DateTime.Today;
OleDbDataReader project = projects.ExecuteReader();
while (project.Read())
{
listBox2.Items.Add(project[1].ToString());
}
}
您没有使用它,但对于其他可能的用户,SqlCommand使用命名参数
SELECT * FROM Client_projects WHERE clients = @Clients
projects.Parameters.Add("@Clients", SqlDbType.VarChar).Value = listBox1.SelectedItem.ToString();
正确的方法是传入一个带有值的参数。客户端是varchar吗?然后使用
WHERE clients='”+(listBox1.SelectedItem.ToString())+“'“
@SurajS我尝试了你的代码,但仍然失败了。你说的varchar是什么意思?我现在使用的伪值是‘客户端1’、‘客户端2’”etc@GordonLinoff你是如何作为参数传入的你有什么例子吗code@JamesPiper你有什么例外?而项目[1]
不应该是项目[0]
?