【发布时间】: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