求代码优化。SQL高手来

l8487 2008-06-03 04:01:18

try
{
if (tbmonth.Text.ToString().Trim() == "本月")
{
tbmonth.Text = "请不要用‘本月’做为月报表名称";
}
else
{
string kaohefangshi = this.DropDownList1.Text.Trim();
string month = tbmonth.Text.ToString().Trim();
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["conn2"]);
conn.Open();

//奖扣分记录修改为报表所在月。
string sql1 = "update rjb_detail set month='" + month + "' where month='本月'";
SqlCommand cmd1 = new SqlCommand(sql1, conn);
cmd1.ExecuteNonQuery();

//更新月报表
//--首先判断记录为‘本月’的报表的月报是月、季度、还是年。根据情况为每个科室增加相应的记录
string sqlby="select kaohefangshi from month where month='本月'";
SqlCommand cmdsqlby=new SqlCommand(sqlby,conn);
SqlDataReader reader=cmdsqlby.ExecuteScalar();
if(reader.Read())
{
string khfs=reader["kaohefangshi"].ToString().Trim();
}
reader.Close();
if(khfs=="12")//考核方式=12表示为这是一个季度报,需要更新所有考核方式=‘1’的报表
{
string sqlks="select distinct(month) as month from month where kaohefangshi='1'";//查询考核方式为月的所有月份列表,然后根据月份列表批量增加相应的记录
SqlCommand cmdsqlks=new SqlCommand(sqlks,conn);
SqlDataReader reader1=cmdsqlks.ExecuteReader();
while(reader.Read())//从读出的月份列表中依次选择相应的月,插入输入季度考核的月的数据。
{
string intsertxjl="insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,month) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,'"+reader1["month"].ToString().Trim()+"' where mkh='0' and qkh='1' and month='本月'";
SqlCommand cmdintsertxjl=new SqlCommand(intsertxjl,conn);
cmdintsertxjl.ExecuteNonQuery();
}
//更新所有考核方式=1的月份。将考核方式修改为12,表示季度增加的分数已经分配给相应的月
string sql12="update month set kaohefangshi='12' where kaohefangshi='1'";
SqlCommand cmdsql12=new SqlCommand(sql12,conn);
cmdsql12.ExecuteNonQuery();
}
else if(khfs=="123")//考核方式表示这是一个年报。需要更新所有的khfs<>"123"的记录
{
string sqlks="select distinct(month) as month from month where kaohefangshi<>'123'";
SqlCommand cmdsqlks=new SqlCommand(sqlks,conn);
SqlDataReader reader1=cmdsqlks.ExecuteReader();
while(reader.Read())//从读出的月份列表中依次选择相应的月,插入输入季度考核的月的数据。
{
string intsertxjl="insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,month) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,'"+reader1["month"].ToString().Trim()+"' where mkh='0' and ykh='1' and month='本月'";
SqlCommand cmdintsertxjl=new SqlCommand(intsertxjl,conn);
cmdintsertxjl.ExecuteNonQuery();
}
//更新所有考核方式=1的月份。将考核方式修改为12,表示季度增加的分数已经分配给相应的月
string sql12="update month set kaohefangshi='123' where kaohefangshi<>'123'";
SqlCommand cmdsql12=new SqlCommand(sql12,conn);
cmdsql12.ExecuteNonQuery();
}

//--其次将本月设置月报当月的month修改为录入的月份
string sql = "update month set month='" + month + "' where month='本月'";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();

//插入新月报
string sqladd = "insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,fz,month,quarte,year from kaohedetail where " + kaohefangshi + "='1'";
SqlCommand cmdsqladd = new SqlCommand(sqladd, conn);
cmdsqladd.ExecuteNonQuery();
//--设置考核方式
if(kaohefangshi.ToString().Trim()=="1")
{
string sqlkhfs = "update month set kaohefangshi='1' where month='本月'";
}
else if (kaohefangshi.ToString().Trim() = "2")
{
string sqlkhfs = "update month set kaohefangshi='12' where month='本月'";
}
else if (kaohefangshi.ToString().Trim() = "3")
{
string sqlkhfs="update month set kaohefangshi='123' where month='本月'"
}
SqlCommand cmdsqlkhfs=new SqlCommand(cmdsqlkhfs,conn);
cmdsqlkhfs.ExecuteNonQuery();//到此新月报已经插入完毕。



conn.Close();
Response.Write("<script language=javascript>alert('操作成功');</script");
}
}
catch
{
Response.Write("<script language=javascript>alert('出现严重错误,请通知开发人员');</script");
}
...全文
160 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
l8487 2008-06-03
  • 打赏
  • 举报
回复
通过这篇帖子我明白。原来我以前很多思想都是错误的。以后必须改变。我以后坚决不构造SQL语句。全部使用存储过程。谢谢各位
sy375 2008-06-03
  • 打赏
  • 举报
回复
if (tbmonth.Text.ToString().Trim() == "本月")
{
tbmonth.Text = "请不要用‘本月’做为月报表名称";
return;
}

string kaohefangshi = this.DropDownList1.Text.Trim();
string kaohefangshiValue = this.DropDownList1.selectedValue;//将1、2、3所对应的1,12,123写到value里面,下面将会省好多代码
string month = tbmonth.Text.ToString().Trim();
string sql = string.Empty;//执行多条sql语句,用一个变量记录就可以了

//奖扣分记录修改为报表所在月。
ExecuteNonQuery("update rjb_detail set month='" + month + "' where month='本月'");

//更新月报表
//--首先判断记录为‘本月’的报表的月报是月、季度、还是年。根据情况为每个科室增加相应的记录

SqlDataReader reader = ExecuteReader("select kaohefangshi from month where month='本月'");
if (reader.Read())
{
string khfs = reader["kaohefangshi"].ToString().Trim();
}

if(khfs=="12")//考核方式=12表示为这是一个季度报,需要更新所有考核方式=‘1’的报表
{
//查询考核方式为月的所有月份列表,然后根据月份列表批量增加相应的记录
SqlDataReader reader1=ExecuteReader("select distinct(month) as month from month where kaohefangshi='1'");
while(reader1.Read())//从读出的月份列表中依次选择相应的月,插入输入季度考核的月的数据。
{
sql = "insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,month) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,'" + reader1["month"].ToString().Trim() + "' where mkh='0' and qkh='1' and month='本月' ;";
}
//更新所有考核方式=1的月份。将考核方式修改为12,表示季度增加的分数已经分配给相应的月
sql += "update month set kaohefangshi='12' where kaohefangshi='1' ;"

}
else if(khfs=="123")//考核方式表示这是一个年报。需要更新所有的khfs<>"123"的记录
{
ExecuteReader("select distinct(month) as month from month where kaohefangshi<>'123'");
while(reader.Read())//从读出的月份列表中依次选择相应的月,插入输入季度考核的月的数据。
{
sql += "insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,month) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,'"+reader1["month"].ToString().Trim()+"' where mkh='0' and ykh='1' and month='本月' ;";

}
//更新所有考核方式=1的月份。将考核方式修改为12,表示季度增加的分数已经分配给相应的月
sql += "update month set kaohefangshi='123' where kaohefangshi<>'123' ;";
}

//--其次将本月设置月报当月的month修改为录入的月份
sql += "update month set month='" + month + "' where month='本月' ;";

//插入新月报
sql += "insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,fz,month,quarte,year from kaohedetail where " + kaohefangshi + "='1' ;";

//--设置考核方式
sql += string.Format("update month set kaohefangshi='{0}' where month='本月'", kaohefangshiValue);

if(ExecuteNonQuery(sql))
this.RegisterStartupScript("aa","<script language=javascript>alert('操作成功');</script>")
else
this.RegisterStartupScript("aa","<script language=javascript>alert('出现严重错误,请通知开发人员');</script>");

}


/// <summary>
/// 数据库插入、修改
/// </summary>
/// <param name="strCommand">sql语句</param>
/// <returns>是否成功</returns>
public bool ExecuteNonQuery(string strCommand)
{
try
{
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["conn2"]);
conn.Open();
SqlCommand cmd1 = new SqlCommand(strCommand, conn);
int aaa = cmd1.ExecuteNonQuery();
conn.Close();
if (aaa <= 0)
return false;
}
catch
{
return false;
}
return true;
}
/// <summary>
/// 查询
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public SqlDataReader ExecuteReader(string query)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["conn2"]);
conn.Open();
SqlCommand cmdsqlks = new SqlCommand(query, conn);
SqlDataReader reader1 = cmdsqlks.ExecuteReader();
reader1.Close();
conn.Close();

return reader1;
}
sy375 2008-06-03
  • 打赏
  • 举报
回复
if (tbmonth.Text.ToString().Trim() == "本月")
{
tbmonth.Text = "请不要用‘本月’做为月报表名称";
return;
}

string kaohefangshi = this.DropDownList1.Text.Trim();
string kaohefangshiValue = this.DropDownList1.selectedValue;//将1、2、3所对应的1,12,123写到value里面,下面将会省好多代码
string month = tbmonth.Text.ToString().Trim();
string sql = string.Empty;//执行多条sql语句,用一个变量记录就可以了

//奖扣分记录修改为报表所在月。
ExecuteNonQuery("update rjb_detail set month='" + month + "' where month='本月'");

//更新月报表
//--首先判断记录为‘本月’的报表的月报是月、季度、还是年。根据情况为每个科室增加相应的记录

SqlDataReader reader = ExecuteReader("select kaohefangshi from month where month='本月'");
if (reader.Read())
{
string khfs = reader["kaohefangshi"].ToString().Trim();
}

if(khfs=="12")//考核方式=12表示为这是一个季度报,需要更新所有考核方式=‘1’的报表
{
//查询考核方式为月的所有月份列表,然后根据月份列表批量增加相应的记录
SqlDataReader reader1=ExecuteReader("select distinct(month) as month from month where kaohefangshi='1'");
while(reader1.Read())//从读出的月份列表中依次选择相应的月,插入输入季度考核的月的数据。
{
sql = "insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,month) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,'" + reader1["month"].ToString().Trim() + "' where mkh='0' and qkh='1' and month='本月' ;";
}
//更新所有考核方式=1的月份。将考核方式修改为12,表示季度增加的分数已经分配给相应的月
sql += "update month set kaohefangshi='12' where kaohefangshi='1' ;"

}
else if(khfs=="123")//考核方式表示这是一个年报。需要更新所有的khfs<>"123"的记录
{
ExecuteReader("select distinct(month) as month from month where kaohefangshi<>'123'");
while(reader.Read())//从读出的月份列表中依次选择相应的月,插入输入季度考核的月的数据。
{
sql += "insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,month) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,'"+reader1["month"].ToString().Trim()+"' where mkh='0' and ykh='1' and month='本月' ;";

}
//更新所有考核方式=1的月份。将考核方式修改为12,表示季度增加的分数已经分配给相应的月
sql += "update month set kaohefangshi='123' where kaohefangshi<>'123' ;";
}

//--其次将本月设置月报当月的month修改为录入的月份
sql += "update month set month='" + month + "' where month='本月' ;";

//插入新月报
sql += "insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,fz,month,quarte,year from kaohedetail where " + kaohefangshi + "='1' ;";

//--设置考核方式
sql += string.Format("update month set kaohefangshi='{0}' where month='本月'", kaohefangshiValue);

if(ExecuteNonQuery(sql))
this.RegisterStartupScript("aa","<script language=javascript>alert('操作成功');</script>")
else
this.RegisterStartupScript("aa","<script language=javascript>alert('出现严重错误,请通知开发人员');</script>");

}


/// <summary>
/// 数据库插入、修改
/// </summary>
/// <param name="strCommand">sql语句</param>
/// <returns>是否成功</returns>
public bool ExecuteNonQuery(string strCommand)
{
try
{
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["conn2"]);
conn.Open();
SqlCommand cmd1 = new SqlCommand(strCommand, conn);
int aaa = cmd1.ExecuteNonQuery();
conn.Close();
if (aaa <= 0)
return false;
}
catch
{
return false;
}
return true;
}
/// <summary>
/// 查询
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public SqlDataReader ExecuteReader(string query)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["conn2"]);
conn.Open();
SqlCommand cmdsqlks = new SqlCommand(query, conn);
SqlDataReader reader1 = cmdsqlks.ExecuteReader();
reader1.Close();
conn.Close();

return reader1;
}
amandag 2008-06-03
  • 打赏
  • 举报
回复
简单说说吧

try
{
//都应该是Text属性了还需要ToString()么?
if (tbmonth.Text.ToString().Trim() == "本月")
{
tbmonth.Text = "请不要用‘本月’做为月报表名称";
}
else
{
string kaohefangshi = this.DropDownList1.Text.Trim();
string month = tbmonth.Text.ToString().Trim();
//ASP.NET 2.0中连接字符串应该放在Web.Config的connectionStrings节中 SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["conn2"]);
连接应该尽可能晚地打开
// conn.Open();

//奖扣分记录修改为报表所在月。
//从哪里学的用拼接字符串,用参数更好
string sql1 = "update rjb_detail set month='" + month + "' where month='本月'";
SqlCommand cmd1 = new SqlCommand(sql1, conn);
conn.Open();
cmd1.ExecuteNonQuery();

//更新月报表
//--首先判断记录为‘本月’的报表的月报是月、季度、还是年。根据情况为每个科室增加相应的记录
string sqlby="select kaohefangshi from month where month='本月'";
SqlCommand cmdsqlby=new SqlCommand(sqlby,conn);
//用一个ExecuteScalar()方法返回一个SqlDataReader对象?不如返回一个object,再判断其是否为null
SqlDataReader reader=cmdsqlby.ExecuteScalar();
if(reader.Read())
{
string khfs=reader["kaohefangshi"].ToString().Trim();
}
reader.Close();
if(khfs=="12")//考核方式=12表示为这是一个季度报,需要更新所有考核方式=‘1’的报表
{
string sqlks="select distinct(month) as month from month where kaohefangshi='1'";//查询考核方式为月的所有月份列表,然后根据月份列表批量增加相应的记录
SqlCommand cmdsqlks=new SqlCommand(sqlks,conn);
SqlDataReader reader1=cmdsqlks.ExecuteReader();
while(reader.Read())//从读出的月份列表中依次选择相应的月,插入输入季度考核的月的数据。
{
string intsertxjl="insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,month) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,'"+reader1["month"].ToString().Trim()+"' where mkh='0' and qkh='1' and month='本月'";
SqlCommand cmdintsertxjl=new SqlCommand(intsertxjl,conn);
cmdintsertxjl.ExecuteNonQuery();
}
//更新所有考核方式=1的月份。将考核方式修改为12,表示季度增加的分数已经分配给相应的月
string sql12="update month set kaohefangshi='12' where kaohefangshi='1'";
SqlCommand cmdsql12=new SqlCommand(sql12,conn);
cmdsql12.ExecuteNonQuery();
}
else if(khfs=="123")//考核方式表示这是一个年报。需要更新所有的khfs<>"123"的记录
{
string sqlks="select distinct(month) as month from month where kaohefangshi<>'123'";
SqlCommand cmdsqlks=new SqlCommand(sqlks,conn);
SqlDataReader reader1=cmdsqlks.ExecuteReader();
while(reader.Read())//从读出的月份列表中依次选择相应的月,插入输入季度考核的月的数据。
{
string intsertxjl="insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,month) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh,kaohefangshi,'"+reader1["month"].ToString().Trim()+"' where mkh='0' and ykh='1' and month='本月'";
SqlCommand cmdintsertxjl=new SqlCommand(intsertxjl,conn);
cmdintsertxjl.ExecuteNonQuery();
}
//更新所有考核方式=1的月份。将考核方式修改为12,表示季度增加的分数已经分配给相应的月
string sql12="update month set kaohefangshi='123' where kaohefangshi<>'123'";
SqlCommand cmdsql12=new SqlCommand(sql12,conn);
cmdsql12.ExecuteNonQuery();
}

//--其次将本月设置月报当月的month修改为录入的月份
string sql = "update month set month='" + month + "' where month='本月'";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();

//插入新月报
string sqladd = "insert into month(khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,jcfz,mkh,qkh,ykh) select khdx,khdxfx,khdxfxxh,khnr,fz,jf,kf,khdw,fz,month,quarte,year from kaohedetail where " + kaohefangshi + "='1'";
SqlCommand cmdsqladd = new SqlCommand(sqladd, conn);
cmdsqladd.ExecuteNonQuery();
//--设置考核方式
if(kaohefangshi.ToString().Trim()=="1")
{
string sqlkhfs = "update month set kaohefangshi='1' where month='本月'";
}
else if (kaohefangshi.ToString().Trim() = "2")
{
string sqlkhfs = "update month set kaohefangshi='12' where month='本月'";
}
else if (kaohefangshi.ToString().Trim() = "3")
{
string sqlkhfs="update month set kaohefangshi='123' where month='本月'"
}
SqlCommand cmdsqlkhfs=new SqlCommand(cmdsqlkhfs,conn);
cmdsqlkhfs.ExecuteNonQuery();//到此新月报已经插入完毕。

//你的数据库操作这么多,不如放到一个存储过程里执行

conn.Close();
//应该用Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script type='text/JavaScript'>alert('操作成功');</script>");这样的方式注册客户端脚本
Response.Write("<script language=javascript>alert('操作成功');</script");
}
}
catch
{
Response.Write("<script language=javascript>alert('出现严重错误,请通知开发人员');</script");
}
yaazz 2008-06-03
  • 打赏
  • 举报
回复
有点乱,把数据处理分出来会清楚点
selad 2008-06-03
  • 打赏
  • 举报
回复
写存储过程,加几个参数 就ok
没时间帮做 不好意思
自己多想想

问一楼:[Quote=引用 1 楼 jinjazz 的回复:]
...不得不提个建议
catch
{
Response.Write(" <script language=javascript>alert('出现严重错误,请通知开发人员'); </script");
}
这样的异常处理是极为糟糕的,你的代码过于长,没有兴趣研究。
[/Quote]
你说楼主这种处理方式极为糟糕
为什么不说一种比较好的处理方式呢
sy375 2008-06-03
  • 打赏
  • 举报
回复
我到是有兴趣,闲着也闲着,练一下重构,等一下,我看看
job_2006 2008-06-03
  • 打赏
  • 举报
回复
把参数传进存储过程中,在存储过程中判断
l8487 2008-06-03
  • 打赏
  • 举报
回复
其实我也不想写这么长的。我想了两天了。都不知道怎么处理。最后只有这样的做了。所以求高人闲来无事的时候帮忙看看。有没有更简单的办法处理。
job_2006 2008-06-03
  • 打赏
  • 举报
回复
帮顶一下
jinjazz 2008-06-03
  • 打赏
  • 举报
回复
...不得不提个建议
catch
{
Response.Write("<script language=javascript>alert('出现严重错误,请通知开发人员');</script");
}
这样的异常处理是极为糟糕的,你的代码过于长,没有兴趣研究。

62,075

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧