我正在尝试在特定城市中获得一个DataTable
个房子,房间介于x和y之间。
我正在使用此SQL查询:
"SELECT * FROM Houses WHERE City = '" + Cities.Text +
"' AND Rooms BETWEEN '" + MinRooms.Text + "' AND '" + MaxRooms.Text + "'"
控件是ASP.NET中的下拉列表。
当我将其删除并只留下“房间之间”时,它就可以了。
我应该寻找什么?一切似乎都是正确的。
答案 0 :(得分:6)
我认为Rooms
是int
列,因此您需要删除用于文本列的撇号。但是你应该使用sql-parameters来阻止sql-injection:
string sql = @"SELECT h.* FROM Houses h
WHERE City = @City
AND Rooms BETWEEN @MinRooms AND @MaxRooms";
var table = new DataTable();
using(var con = new SqlConnection(Properties.Settings.Default.ConnectionString))
using(var da = new SqlDataAdapter(sql, con))
{
da.SelectCommand.Parameters.AddWithValue("@City", Cities.Text);
da.SelectCommand.Parameters.AddWithValue("@MinRooms",int.Parse(MinRooms.Text));
da.SelectCommand.Parameters.AddWithValue("@MaxRooms",int.Parse(MaxRooms.Text));
da.Fill(table);
}
答案 1 :(得分:1)
String sql = String.Format("SELECT * FROM Houses WHERE City = '{0}' AND Rooms BETWEEN {1} AND {2}",
Cities.Text, MinRooms.Text, MaxRooms.Text);
不要忽略SQL注入问题......