【问题标题】:using a variable in oledb command在 oledb 命令中使用变量
【发布时间】:2017-12-13 07:15:42
【问题描述】:

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

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


                }

【问题讨论】:

  • 正确的方法是传入一个带值的参数。
  • 客户是 varchar 吗?然后使用WHERE clients =' "+ (listBox1.SelectedItem.ToString()) + "'"
  • @SurajS 我尝试了你的代码,但它仍然失败,此时我使用的虚拟值是 'Client 1' 、 'Client 2' 等,你所说的 varchar 是什么意思
  • @GordonLinoff 你如何作为参数传入你有任何示例代码
  • @JamesPiper 你有什么例外? project[1] 不应该是 project[0]

标签: c# sql concatenation oledb


【解决方案1】:

字符串连接会导致 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2012-09-05
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多