【发布时间】:2018-02-09 06:25:58
【问题描述】:
我在使用 contains(transact-SQL) 返回记录时遇到问题。
此查询在使用静态值的 SQL 服务器查询窗口中具有结果
select * from archive_master where docgroupID=46 and( CONTAINS((docno,docname,accountno,accountName,tags,docyear,docmonth),'"1"')
OR CONTAINS((docno,docname,accountno,accountName,tags,docyear,docmonth),'"*1"')
OR CONTAINS((docno,docname,accountno,accountName,tags,docyear,docmonth),'"1*"')
OR CONTAINS((docno,docname,accountno,accountName,tags,docyear,docmonth),'"*1*"')
)
但是,如果我将查询放到 sqlcommand 并用参数替换静态值,它不会返回任何记录
这是我的代码:
string oconn = ConfigurationManager.ConnectionStrings["ARCHDB"].ConnectionString;
using (SqlConnection empCon = new SqlConnection(oconn))
{
if (txtsearch.Text == "")
{
query = "select * from archive_master where docgroupID=@docgroupID";
}
else
{
query = @"select * from archive_master where docgroupID=@docgroupID and (CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '""@qry""') OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""*@qry"") OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""@qry*"") OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""*@qry*""))";
}
using (SqlCommand emp_Cmd = new SqlCommand(query, empCon))
{
if (txtsearch.Text == "")
{
SqlParameter pdocgroupID = emp_Cmd.Parameters.Add("@docgroupID", SqlDbType.BigInt);
pdocgroupID.Value = Request.QueryString["docgroupID"];
}
else
{
SqlParameter pdocgroupID = emp_Cmd.Parameters.Add("@docgroupID",SqlDbType.BigInt);
SqlParameter pqry = emp_Cmd.Parameters.Add("@qry", SqlDbType.NVarChar);
pdocgroupID.Value = Request.QueryString["docgroupID"];
pqry.Value = txtsearch.Text;
}
emp_Cmd.CommandType = CommandType.Text;
empCon.Open();
SqlDataAdapter adpData = new SqlDataAdapter(emp_Cmd);
DataTable dt = new DataTable();
adpData.Fill(dt);
GridDocgroup.DataSource = dt;
GridDocgroup.DataBind();
empCon.Close();
}
}
我对查询字符串的处理方法是否正确?其中@qry 和@docgroupID 是参数
query = @"select * from archive_master where docgroupID=@docgroupID and (CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '""@qry""') OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""*@qry"") OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""@qry*"") OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""*@qry*""))";
【问题讨论】:
-
您能否尝试以下更改的查询并再次执行代码 "select * from archive_master where docgroupID=@docgroupID and (CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ' "@qry"') OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '"@qry"') OR CONTAINS((docno, docname, accountno, accountName, tags, docyear , docmonth), '"@qry"') OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '"@qry"'))"
-
嗨,Kevin,如果这个词是准确的短语,这个查询将返回一个值,我正在尝试使用 * 通配符搜索部分短语(前缀和后缀)
-
是的,我知道你已经在数据库上创建了全文索引
-
在您的查询中,您需要将单引号 (') 放在 ""@qry"" 之前,就像您在同等服务器中执行的 sql 查询中看到的一样
-
query = @"select * from archive_master where docgroupID=@docgroupID and (CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '""@qry""') OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '""@qry""') OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '""@qry""') OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '""@qry""'))" ;试过这个查询仍然没有记录。我认为星号没有在此处发表评论,因为它被视为文本格式。
标签: asp.net sqlcommand