在 oledb 命令中使用变量

using a variable in oledb command

在 c# 中使用 oledb 命令函数进行 sql 查询时,连接变量的正确方法是什么。要应用一些上下文,我试图使列表框显示的内容依赖于在先前列表中所做的另一个选择 box.This 是我尝试过但不起作用的方法。

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();