Использование данных из запроса - PullRequest
1 голос
/ 15 марта 2011

Я хочу передать записи, найденные моим запросом select, в функцию геокодирования. У меня есть функция и запрос, но я не знаю, как пройти при выборе функции.

//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 ]

1 голос
/ 15 марта 2011

Что-то вроде следующего должно работать. Я понятия не имею, какие свойства существуют в классе геоданных или даже какой метод вы хотите вызвать, но вот общая структура для перебора набора результатов вашего запроса.

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
            }
        }
    }
}

Обратите внимание на использование предложений Using вокруг всего, что реализует IDisposable. Это очень важно для работы с неуправляемым кодом.

1 голос
/ 15 марта 2011

Вы должны сделать что-то вроде:

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. Это позволит вам получить список GeoCodes, выполнив что-то вроде:

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

Где данные - это ваш контекст данных в EF. Это возвращает IEnumerable объектов GeoData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...