我试图在我的数据库中的表中进行搜索,它返回的顶端50行的名字像搜索词被传递给函数,但它总是返回相同的50个结果SQL始终返回相同的结果
我的SQL是这样的:
Select TOP(50) *
FROM [database].[dbo].[records]
WHERE (A_1STNAME LIKE '" + @searchTerm + "%')
ORDER BY A_RECID
当我运行在视觉工作室查询窗口此查询,它工作正常,但是当我通过我的ASP.NET应用程序运行它,它总是返回相同的50结果,并且只有其中一个名字接近我传递给它的searchTerm。
这里是运行功能的页面代码:
protected void Page_Load(object sender, EventArgs e)
{
_migrated_data data = new _migrated_data();
DataSet ds = data.Search(Request.QueryString.Get("query"), "A_RECID", 50);
if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
rpt_Data.DataSource = ds.Tables[0].DefaultView;
rpt_Data.DataBind();
}
}
,这里是_migrated_data的搜索方法:
public DataSet Search(String @pSearchTerm, String @pSortBy, int @pRowCount)
{
DataSet ds = new DataSet();
OleDbConnection objOleDBConn;
OleDbDataAdapter objOleDBDa;
objOleDBConn = new OleDbConnection(ClearingHouse_OLEDDB);
objOleDBConn.Open();
string lSQL = "SELECT TOP(50) * FROM [database].[dbo].[records]";
lSQL += " WHERE (A_1STNAME LIKE @searchTerm) ORDER BY @sortBy";
SqlCommand t = new SqlCommand(lSQL);
if (pSearchTerm != null && pSearchTerm != "")
{
t.Parameters.AddWithValue("@searchTerm", @pSearchTerm + "%");
}
if (pSortBy != null && pSortBy != "")
{
t.Parameters.AddWithValue("@sortBy", @pSortBy);
}
else
{
t.Parameters.AddWithValue("@sortBy", "A_RECID");
}
objOleDBDa = new OleDbDataAdapter(t.CommandText, objOleDBConn);
objOleDBDa.SelectCommand.CommandType = CommandType.Text;
objOleDBDa.Fill(ds);
objOleDBConn.Close();
return ds;
}
使用当地人查看T的最后的CommandText,我得到的上面给出的sql结果。
任何帮助是极大的appriciated :)
你确定你的应用程序通过了有效的SQL吗?我的意思是你使用SqlCommand.Parameters.Add(... – rkosegi 2012-03-31 15:00:08
你确定搜索词没有被硬编码在你的asp页面的某个地方吗? – 2012-03-31 15:01:41
还要注意你的当前sql是开放给sql注入的,因为你拥有它。应该像@rkosegi建议的那样将搜索项作为参数传递给我 – 2012-03-31 15:02:46