问题是这样的:
我想这样:
有一个查询对话框,设置查询参数,然后点查询按钮,执行查询操作,并将结果反映到主窗体,想查几次就可以查几次,点退出才关闭这个对话框。
但是结果:
查一次可以,查第二次就查不出来了,查询结果是0个,不懂不懂如果改成这样:查完就关闭对话框,想再查再打开就可以,但是这样不如第一种想法方便。大家帮忙解决下哈~ 代码如下:
private void btnShow_Click(object sender, EventArgs e)
{
carID = txtCarID.Text;
int period = (cmbPeriod.SelectedIndex + 1) * 15;
int dt_hour = Convert.ToInt32(cmbTime.Value);
startDt = startDt.AddHours(dt_hour - 1);
startDt = startDt.AddMinutes(Convert.ToDouble(60 - period));
endDt = endDt.AddHours(Convert.ToDouble(dt_hour));
endDt = endDt.AddMinutes(period); string str = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\DBTopo.mdb";
OleDbConnection thisConnection = new OleDbConnection(str);
thisConnection.Open();// open the mdb
string str_pts = null; if (carID == "")
{
MessageBox.Show("请输入您想查询的车辆编号!");
return;
}
else
{
#region 显示车辆点
mainfrm.pts.Clear();//初始化
mainfrm.segs.Clear(); if (rdb_showpts.Checked)//显示车辆点
{
mainfrm.showPts = true;
mainfrm.showSegs = false;
if (startDt != endDt)
{
OleDbCommand thisCommand = thisConnection.CreateCommand();
if (carID == "")
str_pts = @"SELECT * FROM HistoryGPS WHERE VT_DATE >=#" + startDt + "# AND VT_DATE <=#" + endDt + "#";
else
str_pts = @"SELECT * FROM HistoryGPS WHERE VT_ID = '" + carID + "' AND VT_DATE >=#" + startDt + "# AND VT_DATE <=#" + endDt + "#";
thisCommand.CommandText = str_pts;
OleDbDataReader ptsReader = thisCommand.ExecuteReader();
double max_x = 0;
double min_x = 0;
double max_y = 0;
double min_y = 0;
int cows = 0;
while (ptsReader.Read())
{
double x = 0;
double y = 0;
IPoint pt = new ESRI.ArcGIS.Geometry.Point();
cows++;//表示读的个数
if (cows == 1)
{
x = Convert.ToDouble(ptsReader["Matched_X"]);
y = Convert.ToDouble(ptsReader["Matched_Y"]);
pt.X = x;
pt.Y = y;
mainfrm.pts.Add(pt);
max_x = x;//赋初值
min_x = x;
max_y = y;
min_y = y;
}
else
{
x = Convert.ToDouble(ptsReader["Matched_X"]);
y = Convert.ToDouble(ptsReader["Matched_Y"]);
pt.X = x;
pt.Y = y;
mainfrm.pts.Add(pt);
if (x > max_x)
max_x = x;
if (x < min_x)
min_x = x;
if (y > max_y)
max_y = y;
if (y < min_y)
min_y = y;
}
}
mainfrm.pEnvelope.XMax = max_x;
mainfrm.pEnvelope.YMax = max_y;
mainfrm.pEnvelope.XMin = min_x;
mainfrm.pEnvelope.YMin = min_y;
mainfrm.pEnvelope.Expand(1.5, 1.5, true);
mainfrm.MapCtr.Extent = (IEnvelope)mainfrm.pEnvelope;//zoom to gps pts
}
}
#endregion
}
thisConnection.Close();
// this.Dispose();
}
我想这样:
有一个查询对话框,设置查询参数,然后点查询按钮,执行查询操作,并将结果反映到主窗体,想查几次就可以查几次,点退出才关闭这个对话框。
但是结果:
查一次可以,查第二次就查不出来了,查询结果是0个,不懂不懂如果改成这样:查完就关闭对话框,想再查再打开就可以,但是这样不如第一种想法方便。大家帮忙解决下哈~ 代码如下:
private void btnShow_Click(object sender, EventArgs e)
{
carID = txtCarID.Text;
int period = (cmbPeriod.SelectedIndex + 1) * 15;
int dt_hour = Convert.ToInt32(cmbTime.Value);
startDt = startDt.AddHours(dt_hour - 1);
startDt = startDt.AddMinutes(Convert.ToDouble(60 - period));
endDt = endDt.AddHours(Convert.ToDouble(dt_hour));
endDt = endDt.AddMinutes(period); string str = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\DBTopo.mdb";
OleDbConnection thisConnection = new OleDbConnection(str);
thisConnection.Open();// open the mdb
string str_pts = null; if (carID == "")
{
MessageBox.Show("请输入您想查询的车辆编号!");
return;
}
else
{
#region 显示车辆点
mainfrm.pts.Clear();//初始化
mainfrm.segs.Clear(); if (rdb_showpts.Checked)//显示车辆点
{
mainfrm.showPts = true;
mainfrm.showSegs = false;
if (startDt != endDt)
{
OleDbCommand thisCommand = thisConnection.CreateCommand();
if (carID == "")
str_pts = @"SELECT * FROM HistoryGPS WHERE VT_DATE >=#" + startDt + "# AND VT_DATE <=#" + endDt + "#";
else
str_pts = @"SELECT * FROM HistoryGPS WHERE VT_ID = '" + carID + "' AND VT_DATE >=#" + startDt + "# AND VT_DATE <=#" + endDt + "#";
thisCommand.CommandText = str_pts;
OleDbDataReader ptsReader = thisCommand.ExecuteReader();
double max_x = 0;
double min_x = 0;
double max_y = 0;
double min_y = 0;
int cows = 0;
while (ptsReader.Read())
{
double x = 0;
double y = 0;
IPoint pt = new ESRI.ArcGIS.Geometry.Point();
cows++;//表示读的个数
if (cows == 1)
{
x = Convert.ToDouble(ptsReader["Matched_X"]);
y = Convert.ToDouble(ptsReader["Matched_Y"]);
pt.X = x;
pt.Y = y;
mainfrm.pts.Add(pt);
max_x = x;//赋初值
min_x = x;
max_y = y;
min_y = y;
}
else
{
x = Convert.ToDouble(ptsReader["Matched_X"]);
y = Convert.ToDouble(ptsReader["Matched_Y"]);
pt.X = x;
pt.Y = y;
mainfrm.pts.Add(pt);
if (x > max_x)
max_x = x;
if (x < min_x)
min_x = x;
if (y > max_y)
max_y = y;
if (y < min_y)
min_y = y;
}
}
mainfrm.pEnvelope.XMax = max_x;
mainfrm.pEnvelope.YMax = max_y;
mainfrm.pEnvelope.XMin = min_x;
mainfrm.pEnvelope.YMin = min_y;
mainfrm.pEnvelope.Expand(1.5, 1.5, true);
mainfrm.MapCtr.Extent = (IEnvelope)mainfrm.pEnvelope;//zoom to gps pts
}
}
#endregion
}
thisConnection.Close();
// this.Dispose();
}
需要时刻与数据库对象连接才可以读取对象实例化后然后read
,最后要关闭不然会出现无法读取数据的情况