【发布时间】:2020-01-27 18:05:43
【问题描述】:
我想优化我的查询以返回用户插入 New York 或 NEW YORK 或 new york 的结果
我在db 中有大约 10000 条记录,有些记录以较高的后面一些较低的后者开头,如果我像 New York 这样插入,我的查询不会返回结果。
[WebMethod]
public string GetAkontasByMjesto(string Mjesto)
{
OracleConnection conn = new OracleConnection("DATA SOURCE=test-1:1521/fba;USER ID=test;PASSWORD=test");
OracleDataAdapter dr = new OracleDataAdapter("Select * from AKONTAS where MJESTO='" + Mjesto + "'", conn);
DataSet ds = new DataSet();
ds.Tables.Add("AKONTAS");
dr.Fill(ds, "AKONTAS");
DataTable tt = ds.Tables[0];
return ds.GetXml();
}
这个问题有什么解决办法吗?
【问题讨论】:
-
真正的问题是允许SQL注入攻击和转换错误的字符串连接。如果
Mjesto包含';drop table AKONTAS;//会发生什么? -
这不是这个问题的重复吗? stackoverflow.com/questions/5391069/… |你基本上只是想让它不区分大小写,对吧?
-
这个问题对你有帮助吗? stackoverflow.com/questions/5391069/…
-
@Xerrox 可能不是您,但是由于您的代码正在扫描整个表而必须等待的外部人员代码呢?不要介意看到 IO 峰值的 DBA。无论如何,Dmitry Bychenko 在评论中解释说,您可以在 Oracle 中的函数上创建索引。在这种情况下,您可以使用
UPPER(MJESTO)而不会降低性能。添加索引是一个小改动,可能更容易被接受。 -
副本为这个问题提供了两个很好的解决方案