使用来自查询的数据

时间:2011-03-15 19:19:55

标签: .net sql-server c#-4.0

我想将我的select查询找到的记录传递给Geocoding函数。我有函数和查询但不知道如何选择函数时传递。

//Geocoding Constructor
GeocodeAddress(geodata address);


//Method calling Query
static void updateDBS()
{
    string conStr =
     @"Data Source=PEGASUS2\sqlexpress;Initial Catalog=gdata;Integrated Security=True";

    //MessageBox.Show("Constr=" + conStr);
    SqlConnection con = new SqlConnection();
    con.ConnectionString = conStr;
    con.Open();

    string stm = @"SELECT TOP 200 [id]
          ,[agency]
          ,[calltime]
          ,[incidentType]
          ,[city]
          ,[state]
          ,[intersection]
    FROM [gdata].[dbo].[geodata]
    ORDER BY id ASC";

    //SqlCommand cmd = new SqlCommand(stm, con);
    //SqlDataReader reader = cmd.ExecuteReader();

    con.Close();
}

2 个答案:

答案 0 :(得分:1)

你必须做类似的事情:

List<GeoCode> geoCodes = new List<GeoCode>();
while(reader.Read())
{
   GeoCode geoCode = new GeoCode();
   geoCode.Agency = reader.GetString(reader.GetOrdinal("agency"));
   geoCode.CallTime = reader.GetDateTime(reader.GetOrdinal("calltime"));
   geoCodes.Add(geoCode);
}

另一种选择是使用框架,如EntityFramework。这将允许您通过执行以下操作获取GeoCode列表:

var geoCodes = data.GeoData.OrderBy(g => g.Id).Take(200);

数据是EF中的数据上下文。这将返回一个IEnumerable的GeoData对象。

答案 1 :(得分:1)

以下内容应该有效。我不知道地理数据类中存在哪些属性,甚至不知道要调用哪种方法,但这里是从查询中迭代结果集的一般结构。

using (SqlConnection con = new SqlConnection(conStr)) {
    con.Open();
    using (SqlCommand cmd = new SqlCommand(stm, con)) {
        using (SqlDataReader reader = cmd.ExecuteReader()) {
            while (reader.Read()) {
                geodata address = new geodata();
                // assign properties to address object
                address.Agency = reader["agency"].ToString();
                // call your method
            }
        }
    }
}

请注意在实现IDisposable的所有内容周围使用Using子句。这对于使用非托管代码非常重要。