如何在C#中的select语句中使用数据集中的结果

时间:2014-08-11 08:20:27

标签: c# sql

我的目的是使用Visual Studio数据库中的select语句获取字符串的值,并使用该字符串变量获取另一个select语句的结果并执行它。

我打算做这样的事情,

 string qry = "SELECT vehicle_no FROM User_table  WHERE username='" + userName + "' ;";
 string query = "SELECT longitude,latitude FROM Gps_table  WHERE vehicle_no='" + qry + "';"; 

 SqlCommand command = new SqlCommand(qry, dbConnection);

 if (reader.HasRows)
 {
     while (reader.Read())
     {
         gpsTable.Rows.Add(reader["longitude"], reader["latitude"]);
     }
 }

 reader.Close();
 dbConnection.Close();
 return gpsTable;

但我发现这不可能完成,我必须使用数据集作为第一个选择语句。我怎样才能完成所需的任务。请帮助!!!

提前致谢

2 个答案:

答案 0 :(得分:0)

为什么不只是这个(和心灵用户名"'; DROP DATABASE * ;";)

     string query = "SELECT longitude,latitude FROM Gps_table  
WHERE vehicle_no
IN
( 
      SELECT vehicle_no FROM User_table  WHERE username='" + userName + "' 
)

"; 

     SqlCommand command = new SqlCommand(query, dbConnection);

     if (reader.HasRows)
     {
         while (reader.Read())
         {
             gpsTable.Rows.Add(reader["longitude"], reader["latitude"]);
         }
     }

     reader.Close();
     dbConnection.Close();
     return gpsTable;

我的意思是: 在您的SQL语句中,我可以创建一个名称为"'; DROP DATABASE *;"。
然后,当您执行查询时,它将删除数据库,因为'在字符串中终止变量,并将drop database sql语句注入到命令...

答案 1 :(得分:0)

试试这个

SqlCommand command = Connection.CreateCommand();
command.CommandText = "SELECT G.longitude,G.latitude " +
                      "FROM Gps_table G Inner Join User_table U ON G.vehicle_no=U.vehicle_no  " +
                      "WHERE U.username=@username;";

command.Parameter.Add("@username", SqlDbType.Varchar).Value = userName;

使用DataTable

SqlDataAdapter da = new SqlDataAdapter(command)
DataTable dt = New DataTable();
da.Fill(dt);

dgv.DataSource = dt;

使用SqlDataReader

SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
    While (reader.Read())
    {
        gpsTable.Rows.Add(reader["longitude"], reader["latitude"]);
    }
}  
reader.Close();