private void button1_Click(object sender, EventArgs e)
{
string con = getconnection();
using (SqlConnection conn = new SqlConnection(con))
{
conn.Open(); //连接数据库
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from 道路_事故信息视图 where 道路名称 =" + textBox1.Text ;
SqlDataReader sdr=cmd.ExecuteReader();//执行查找记录的命令
int qdzh=(int)sdr[2];//起点桩号
int zdzh=(int)sdr[3];//终点桩号
int dlzh=(int)sdr[4];//事发桩号
int buch=Convert.ToInt32(textBox2.Text);//检测步长
int count=0;//统计事故数量
int biaozhun=Convert.ToInt32(textBox3.Text);//检测标准,即事故率临界值
for (int qdzhi = qdzh; qdzhi <= zdzh; qdzhi += buch)
{
while (sdr.Read())
{
if (dlzh>= qdzhi && dlzh <= qdzhi + buch)
{
count++; }
double shigurate = count / buch;//计算事故率
if (shigurate > biaozhun)
{
cmd.CommandText = "insert into 黑点路段统计表 (路段名称,起点桩号,终点桩号,里程事故率,检测临界值) values(@路名,@起点,@终点,@事故率,@标准)";
cmd.Parameters.Add("@路名", SqlDbType.NVarChar, 50).Value = textBox1.Text;
cmd.Parameters.Add("@起点", SqlDbType.Int).Value = qdzhi;
cmd.Parameters.Add("@终点", SqlDbType.NChar).Value = qdzhi + buch;
cmd.Parameters.Add("@事故率", SqlDbType.Decimal).Value = shigurate;
cmd.Parameters.Add("@标准", SqlDbType.Decimal).Value = biaozhun;
int i = cmd.ExecuteNonQuery();
}
}
}
//显示检测结果
cmd.CommandText ="select *from 黑点路段统计表 ";
DataSet ret =new DataSet ();
SqlDataAdapter adapter=new SqlDataAdapter ();
adapter .SelectCommand =cmd;
adapter.Fill (ret);
dataGridView1.DataSource=ret.Tables [0];
}
}
{
string con = getconnection();
using (SqlConnection conn = new SqlConnection(con))
{
conn.Open(); //连接数据库
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from 道路_事故信息视图 where 道路名称 =" + textBox1.Text ;
SqlDataReader sdr=cmd.ExecuteReader();//执行查找记录的命令
int qdzh=(int)sdr[2];//起点桩号
int zdzh=(int)sdr[3];//终点桩号
int dlzh=(int)sdr[4];//事发桩号
int buch=Convert.ToInt32(textBox2.Text);//检测步长
int count=0;//统计事故数量
int biaozhun=Convert.ToInt32(textBox3.Text);//检测标准,即事故率临界值
for (int qdzhi = qdzh; qdzhi <= zdzh; qdzhi += buch)
{
while (sdr.Read())
{
if (dlzh>= qdzhi && dlzh <= qdzhi + buch)
{
count++; }
double shigurate = count / buch;//计算事故率
if (shigurate > biaozhun)
{
cmd.CommandText = "insert into 黑点路段统计表 (路段名称,起点桩号,终点桩号,里程事故率,检测临界值) values(@路名,@起点,@终点,@事故率,@标准)";
cmd.Parameters.Add("@路名", SqlDbType.NVarChar, 50).Value = textBox1.Text;
cmd.Parameters.Add("@起点", SqlDbType.Int).Value = qdzhi;
cmd.Parameters.Add("@终点", SqlDbType.NChar).Value = qdzhi + buch;
cmd.Parameters.Add("@事故率", SqlDbType.Decimal).Value = shigurate;
cmd.Parameters.Add("@标准", SqlDbType.Decimal).Value = biaozhun;
int i = cmd.ExecuteNonQuery();
}
}
}
//显示检测结果
cmd.CommandText ="select *from 黑点路段统计表 ";
DataSet ret =new DataSet ();
SqlDataAdapter adapter=new SqlDataAdapter ();
adapter .SelectCommand =cmd;
adapter.Fill (ret);
dataGridView1.DataSource=ret.Tables [0];
}
}
解决方案 »
- 并非所有的路径都有返回值。。
- Visual Studio 2005调试
- 我完全安装了vs team 2008中文版,但帮助文件中只有很少的东西,就连DateTime()这样最普通的函数用法也查不到,类库帮助更找不到,是怎么回事?
- lable控件的数据类型能转换的吗?
- winform中的DataGrid中的列如何设置格式比如时间的字段只显示08:30 而不要显示2005-03-03 08:30
- 请问我用c#的webClient.DownloadFile下载http文件,怎么样才能知道http文件的下载次数呢?
- SET协议中的认证中心和支付网关系统实现的源代码 谢谢了 很急
- ???????有个语句执行需要15分钟左右
- 窗体的问题
- 问一个ADO的问题,急
- 插件Dll类库中的窗体显示问题
- C# 自定义垂直字体
{
string con = getconnection();
using (SqlConnection conn = new SqlConnection(con))
{
conn.Open(); //连接数据库
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from 道路_事故信息视图 where 道路名称 =" + textBox1.Text ;
SqlDataReader sdr=cmd.ExecuteReader();//执行查找记录的命令
int qdzh=(int)sdr[2];//起点桩号
int zdzh=(int)sdr[3];//终点桩号
int dlzh=(int)sdr[4];//事发桩号
int buch=Convert.ToInt32(textBox2.Text);//检测步长
int count=0;//统计事故数量
int biaozhun=Convert.ToInt32(textBox3.Text);//检测标准,即事故率临界值
for (int qdzhi = qdzh; qdzhi <= zdzh; qdzhi += buch)
{
//在这里加个判断,if(sdr.HasRows)
while (sdr.Read())
{
if (dlzh>= qdzhi && dlzh <= qdzhi + buch)
{
count++; }
double shigurate = count / buch;//计算事故率
if (shigurate > biaozhun)
{
cmd.CommandText = "insert into 黑点路段统计表 (路段名称,起点桩号,终点桩号,里程事故率,检测临界值) values(@路名,@起点,@终点,@事故率,@标准)";
cmd.Parameters.Add("@路名", SqlDbType.NVarChar, 50).Value = textBox1.Text;
cmd.Parameters.Add("@起点", SqlDbType.Int).Value = qdzhi;
cmd.Parameters.Add("@终点", SqlDbType.NChar).Value = qdzhi + buch;
cmd.Parameters.Add("@事故率", SqlDbType.Decimal).Value = shigurate;
cmd.Parameters.Add("@标准", SqlDbType.Decimal).Value = biaozhun;
int i = cmd.ExecuteNonQuery();
}
}
}
//显示检测结果
cmd.CommandText ="select *from 黑点路段统计表 ";
DataSet ret =new DataSet ();
SqlDataAdapter adapter=new SqlDataAdapter ();
adapter .SelectCommand =cmd;
adapter.Fill (ret);
dataGridView1.DataSource=ret.Tables [0];
}
}
这个循环过程中sdr.Read一直能读到值吗,比如for循环是100次,而你的数据集只有90条记录,当循环到91时,不就出错了吗
你需要调用sdr.Read()
楼上正解,楼主为何要在for循环去执行下面的动作?
while (sdr.Read())
{}
正常就在
while (sdr.Read())
{}
做你要做的事情就好了。