我在我的Postgres数据库中有以下函数
CREATE OR REPLACE FUNCTION "thisSearchList"(IN searchstring text)
RETURNS TABLE(q_description text, q_barcode text) AS
$BODY$
SELECT q_description, q_barcode
FROM q_product
WHERE q_description like $1
OR q_barcode like $1
$BODY$
LANGUAGE sql VOLATILE
COST 100
ROWS 1000;
在我的C#代码中,我有以下代码来利用这个函数。
NpgsqlConnection connection = new NpgsqlConnection("Host=192.168.0.52;Database=bolo;Username=western;Password=western");
connection.Open(); /*OPEN DATABASE CONNECTION*/
NpgsqlCommand cmd = new NpgsqlCommand("thisSearchList", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@string", NpgsqlTypes.NpgsqlDbType.Text);
cmd.Parameters["@string"].Value = searchValue.ToUpper();
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);
}
在运行应用程序时——用户在搜索文本框中输入关键字并点击搜索按钮以触发函数并返回要在视图/页面上显示的产品列表:我收到了以下错误提示。
42883: function thissearchlist(string := text) does not exist
源代码位于
NpgsqlDataReader dr = cmd.ExecuteReader();
根据我通过谷歌的理解,Postgres可能会存在字符串和文本方面的问题!? 它正在寻找一个具有参数字符串而不是文本的函数(在数据库中定义为只能定义文本(而不是字符串))。但是这一行是否应该
cmd.Parameters.Add("@string", NpgsqlTypes.NpgsqlDbType.Text);
如果在函数中传递参数时使用了适当的函数(带有文本参数),是否可以解决问题?这时我错过了什么,或者不可能以这种方式调用Postgres函数?