我想将我的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();
}
答案 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子句。这对于使用非托管代码非常重要。