【问题标题】:Npgsql query with search variable parameter returning empty result C# Postgres带有搜索变量参数的 Npgsql 查询返回空结果 C# Postgres
【发布时间】:2017-06-27 21:05:29
【问题描述】:

我正在使用 Npgsql 查询数据库表并在我的页面/视图上显示结果。 代码在没有 where 子句和参数的情况下可以正常工作,因为它将表中的所有行都放到了视图中。 现在我正在尝试合并一个搜索字符串变量(如果用户输入字符串,那么给我包含这个字符串的表记录)。我的代码如下

string searchValue = TempData["String"].ToString();

var model = new List<ProductViewModel>();      

NpgsqlConnection connection = new NpgsqlConnection
     ("Host=192.168.0.52;Database=test;Username=test;Password=test");
connection.Open();
NpgsqlCommand cmd = new NpgsqlCommand
     ("SELECT * FROM q_product WHERE q_description like @string", connection);

        //lets include our paramater
cmd.Parameters.Add("@string", NpgsqlTypes.NpgsqlDbType.Text);
cmd.Parameters["@string"].Value = searchValue;
cmd.Parameters.AddWithValue(searchValue);

NpgsqlDataReader dr = cmd.ExecuteReader();

while (dr.Read())
{
    var prod = new ProductViewModel();
    prod.q_description = dr["q_description"].ToString();
    prod.q_barcode = dr["q_barcode"].ToString();               

    model.Add(prod);  
}

var pagedProduct = new PaginatedSearch<ProductViewModel>(model, pageIndex, pageSize);

return View(pagedProduct);

当我只有

SELECT * FROM q_product

但是在包含 where 子句和我的搜索字符串变量之后,我得到一个空页面。我在我的代码中做错了什么?

【问题讨论】:

  • searchValue的内容是什么?另请查看LIKE 的文档。
  • 在调试时 searchValue 始终是我在搜索框中输入的任何文本(这是预期的行为)。添加 where 子句时,它只是跳过 while 循环并直接进入 pagedProduct。我会看一下文档。

标签: c# postgresql npgsql


【解决方案1】:

您可能希望在查询中使用% 以使用like 运算符。

NpgsqlCommand cmd = new NpgsqlCommand
     ("SELECT * FROM q_product WHERE q_description like '%' || @string || '%'", connection);

【讨论】:

  • 我之前也有过那行,结果完全相同。
  • 丢失的% 是我得到的。您可以尝试手动对数据库运行相同的查询,中间没有您的 c# 层,并检查那里是否有结果。
  • 更新了正确的连接和自动参数引用
  • 感谢@JGH 和 0xCAFEBABE 的协助。串联修复解决了我的问题,我现在得到了想要的功能。干杯。
猜你喜欢
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 2014-03-13
  • 2020-02-03
相关资源
最近更新 更多