У меня проблемы с возвратом записей с использованием 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*""))";