为什么这个SQL查询没有检索到任何数据?

时间:2013-12-09 21:54:20

标签: asp.net sql-server

我正在尝试在特定城市中获得一个DataTable个房子,房间介于x和y之间。

我正在使用此SQL查询:

"SELECT * FROM Houses WHERE City = '" + Cities.Text + 
"' AND Rooms BETWEEN '" + MinRooms.Text + "' AND '" + MaxRooms.Text + "'"

控件是ASP.NET中的下拉列表。

当我将其删除并只留下“房间之间”时,它就可以了。

我应该寻找什么?一切似乎都是正确的。

2 个答案:

答案 0 :(得分:6)

我认为Roomsint列,因此您需要删除用于文本列的撇号。但是你应该使用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注入问题......