写了一段统计代码,主要是用于统计提交月份的每天6:00-:23:00的分类消费数据,可但循环第一运行到22点时就提示出错,捕获异常后运行到每天的23点就出错!出错提示如下图:主要程序代码如下:/// <summary>
/// 统计分析消费数据
/// </summary>
private void DataAnalysis()
{
string date;
string k = " ";
int cct1=0, cct2=0, cct3=0, cct4=0, ccs=0;
float cbs=0;
DateTime dt1, dt2;
//MessageBox.Show(date);
SqlConnection conn = new SqlConnection("server = .;User id=sa;Pwd=chris;Database=KCBusMag");
try
{
//打开数据库
conn.Open();
labConn.Text = "连接数据库成功";
}
catch
{
labConn.Text = "连接数据库失败,请检查远程数据库连接字段";
} switch (cobMonth.Text)
{
case "01":
case "03":
case "05":
case "07":
case "08":
case "10":
case "12":
for (int d = 1; d <= 31; d++)
{
date = txtyear.Text + "-" + cobMonth.Text + "-" + d.ToString();
//MessageBox.Show(d.ToString());
for (int t = 6; t <= 23; t++)
{ string h;
if (t <= 9)
{
h = date + k + "0" + t.ToString();
dt1 = Convert.ToDateTime(h + ":00:00");
dt2 = Convert.ToDateTime(h + ":59:59");
MessageBox.Show(dt1.ToString());
}
else
{
h = date + k + t.ToString();
dt1 = Convert.ToDateTime(h + ":00:00");
dt2 = Convert.ToDateTime(h + ":59:59");
MessageBox.Show(dt1.ToString());
} string QueryTJ = "SELECT SUM(CASE WHEN rectype=1 THEN 1 ELSE 0 END) as cct1,SUM(CASE WHEN rectype=2 THEN 1 ELSE 0 END) as cct2,SUM(CASE WHEN rectype=3 THEN 1 ELSE 0 END) as cct3,SUM(CASE WHEN rectype=4 THEN 1 ELSE 0 END) as cct4, SUM(balance) as sb FROM EM_RecBuf WHERE Tdatetime BETWEEN '" + dt1 +"' AND '"+ dt2 + "'";
//MessageBox.Show(date + k + h + ":00:00"); SqlCommand sqlcmd = new SqlCommand(QueryTJ,conn);
SqlDataReader ResultRead = sqlcmd.ExecuteReader(); if (ResultRead.Read())
{
//try
//{
cct1 = int.Parse(ResultRead["cct1"].ToString());
cct2 = int.Parse(ResultRead["cct2"].ToString());
cct3 = int.Parse(ResultRead["cct3"].ToString());
cct4 = int.Parse(ResultRead["cct4"].ToString());
//cbs = float.Parse( ResultRead["sb"].ToString());
//}
//catch (Exception e)
//{
// MessageBox.Show(e.ToString());
//} }
else
{
MessageBox.Show("统计出错", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Close();
} ccs = cct1 + cct2 + cct3 + cct4; MessageBox.Show(cct1.ToString() + " " + cct2.ToString() + " " + cct3.ToString() + " " + cct4.ToString() + " " + cbs.ToString());
//写入本地数据库
//SaveTolocal(date,h,cct1,cct2,cct3,cct4,ccs,cbs);
ResultRead.Close();
}
};
break;
case "02":
//………………同第一段,只是喜欢次数不同
break;
case "04":
case "06":
case "09":
case "11":
// ……………………同第一段,只是喜欢次数不同
break; }
conn.Close(); MessageBox.Show("数据分析已完成,现在可以查看流量报表!","恭喜",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
}请各位前辈指点,本人在这里拜谢了!
/// 统计分析消费数据
/// </summary>
private void DataAnalysis()
{
string date;
string k = " ";
int cct1=0, cct2=0, cct3=0, cct4=0, ccs=0;
float cbs=0;
DateTime dt1, dt2;
//MessageBox.Show(date);
SqlConnection conn = new SqlConnection("server = .;User id=sa;Pwd=chris;Database=KCBusMag");
try
{
//打开数据库
conn.Open();
labConn.Text = "连接数据库成功";
}
catch
{
labConn.Text = "连接数据库失败,请检查远程数据库连接字段";
} switch (cobMonth.Text)
{
case "01":
case "03":
case "05":
case "07":
case "08":
case "10":
case "12":
for (int d = 1; d <= 31; d++)
{
date = txtyear.Text + "-" + cobMonth.Text + "-" + d.ToString();
//MessageBox.Show(d.ToString());
for (int t = 6; t <= 23; t++)
{ string h;
if (t <= 9)
{
h = date + k + "0" + t.ToString();
dt1 = Convert.ToDateTime(h + ":00:00");
dt2 = Convert.ToDateTime(h + ":59:59");
MessageBox.Show(dt1.ToString());
}
else
{
h = date + k + t.ToString();
dt1 = Convert.ToDateTime(h + ":00:00");
dt2 = Convert.ToDateTime(h + ":59:59");
MessageBox.Show(dt1.ToString());
} string QueryTJ = "SELECT SUM(CASE WHEN rectype=1 THEN 1 ELSE 0 END) as cct1,SUM(CASE WHEN rectype=2 THEN 1 ELSE 0 END) as cct2,SUM(CASE WHEN rectype=3 THEN 1 ELSE 0 END) as cct3,SUM(CASE WHEN rectype=4 THEN 1 ELSE 0 END) as cct4, SUM(balance) as sb FROM EM_RecBuf WHERE Tdatetime BETWEEN '" + dt1 +"' AND '"+ dt2 + "'";
//MessageBox.Show(date + k + h + ":00:00"); SqlCommand sqlcmd = new SqlCommand(QueryTJ,conn);
SqlDataReader ResultRead = sqlcmd.ExecuteReader(); if (ResultRead.Read())
{
//try
//{
cct1 = int.Parse(ResultRead["cct1"].ToString());
cct2 = int.Parse(ResultRead["cct2"].ToString());
cct3 = int.Parse(ResultRead["cct3"].ToString());
cct4 = int.Parse(ResultRead["cct4"].ToString());
//cbs = float.Parse( ResultRead["sb"].ToString());
//}
//catch (Exception e)
//{
// MessageBox.Show(e.ToString());
//} }
else
{
MessageBox.Show("统计出错", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Close();
} ccs = cct1 + cct2 + cct3 + cct4; MessageBox.Show(cct1.ToString() + " " + cct2.ToString() + " " + cct3.ToString() + " " + cct4.ToString() + " " + cbs.ToString());
//写入本地数据库
//SaveTolocal(date,h,cct1,cct2,cct3,cct4,ccs,cbs);
ResultRead.Close();
}
};
break;
case "02":
//………………同第一段,只是喜欢次数不同
break;
case "04":
case "06":
case "09":
case "11":
// ……………………同第一段,只是喜欢次数不同
break; }
conn.Close(); MessageBox.Show("数据分析已完成,现在可以查看流量报表!","恭喜",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
}请各位前辈指点,本人在这里拜谢了!
││博客空间:http://blog.csdn.net/lovingkiss
││资源下载:http://download.csdn.net/user/lovingkiss
││Email:loving-kiss@163.com [MSN也是这个]
││联系方式:Q66840199 项目、聊天、咨询、探讨、统统收费,呵呵......
╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤
ResultRead["cct1"]里面的信息到底是什么,才好判断问题所在;
cct1是次数统计,用COUNT统计的结果,统计的结果不超过1万!
然后跟踪代码断点看看 ResultRead["cct1"]里面的信息到底是什么,才好判断问题所在;
替换下?
那怎么将这句
string QueryTJ = "SELECT SUM(CASE WHEN rectype=1 THEN 1 ELSE 0 END) as cct1,SUM(CASE WHEN rectype=2 THEN 1 ELSE 0 END) as cct2,SUM(CASE WHEN rectype=3 THEN 1 ELSE 0 END) as cct3,SUM(CASE WHEN rectype=4 THEN 1 ELSE 0 END) as cct4, SUM(balance) as sb FROM EM_RecBuf WHERE Tdatetime BETWEEN '" + dt1 +"' AND '"+ dt2 + "'";当Tdatetime时段不存在时,将返回值替换成0呢!
谢谢,这样就没有出错了,只是我还不太理解DBNull.Value,先去百度补习下!
谢谢各位兄弟的指点!
cbs是float类型,但是好像没有办法写成Convent.的这种强制转换,可以写成float.Parse(ResultRead["sb"])吗?
用这种吧,要不就用int.TryParse