C#参数化查询-参数未替换为设置值

问题描述 投票:0回答:1

我正在将查询和参数从WinForm传递到数据库类。

表单上的代码如下:

string selectedComp = "CPSI";
string catsQuery = "SELECT id, category, old_value, old_desc, new_value, new_desc, reference1, reference2 FROM masterfiles.xref WHERE company_name = '@company' ORDER BY category, old_value";

Db categoriesData = new Db();
dgvCategories.DataSource = categoriesData.GetData(catsQuery, selectedComp);

在我的数据库类中,用于填充数据表/集合的代码是这样的:

public DataTable GetData(string selectQuery, string selectedComp)
{
    NpgsqlConnection conn = new NpgsqlConnection(connString);
    DataSet ds = new DataSet();

    NpgsqlCommand cmd = new NpgsqlCommand(selectQuery, conn);

    cmd.Parameters.Add(new NpgsqlParameter("@company", selectedComp));

    //cmd.Parameters.AddWithValue("@company", selectedComp);
    //cmd.Parameters.Add("@company", NpgsqlDbType.Text);
    //cmd.Parameters["@company"].Value = selectedComp;

    try
    {
        conn.Open();
        NpgsqlDataAdapter da = new NpgsqlDataAdapter(selectQuery, conn);
        conn.Close();

        da.Fill(ds);
        return ds.Tables[0];
    }
}

但是在NpgsqlDataAdapter da = new NpgsqlDataAdapter(selectQuery, conn);处设置了一个断点,selecctQuery并未更改-'@company'仍在查询中。

我想念什么?

c# datatable dataset parameter-passing npgsql
1个回答
0
投票

根本问题是您要将query传递给数据适配器,而不是command。更改

NpgsqlDataAdapter da = new NpgsqlDataAdapter(selectQuery, conn);

NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);

我还将使用using处置所有对象,并且在填充数据集之前不要关闭连接:

using(NpgsqlConnection conn = new NpgsqlConnection(connString))
using(NpgsqlCommand cmd = new NpgsqlCommand(selectQuery, conn))
{

    cmd.Parameters.Add(new NpgsqlParameter("company", selectedComp));

    conn.Open();
    using(NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd))
    {
        DataSet ds = new DataSet();
        da.Fill(ds);
    }
    conn.Close();

    return ds.Tables[0];
}
© www.soinside.com 2019 - 2024. All rights reserved.