当前位置:编程学习 > C#/ASP.NET >>

为什么提示添加成功,数据库却为空,急急急,快下岗

cs:
if (Request.QueryString["ID"] == null)
            {
                string intoSQL = "";
                
                intoSQL = "insert into  webabout (nFile,nTitle,nHtmlText,ncode) values (";
                intoSQL += "" + myClass.replace(txtid.Text) + ",";
                intoSQL += "'" + myClass.replace(txtitle.Text) + "',";
                intoSQL += "'" + txtContent.Text + "',";
                intoSQL += "'" + dbobj.getautoNum("webabout", "nFile") + "')";
                dbobj.getcom("insert into " + intoSQL);
                Page.RegisterStartupScript("alert", @"<script   LANGUAGE=JavaScript>alert('添加成功');window.location='about.aspx';</script>");
            }

类为:
public SqlConnection getcon()
    {
        string myStr = ConfigurationManager.AppSettings["ConnectionString"].ToString();
        //  string myStr = "server=ADMIN;database=test;User id=sa;password=123";
        SqlConnection Sqlcon = new SqlConnection(myStr);
        return Sqlcon;
    }
    public bool getcom(string M_str_Sqlstr)
    {
        SqlConnection Sqlcon = this.getcon();
        Sqlcon.Open();
        SqlCommand Sqlcom = new SqlCommand(M_str_Sqlstr, Sqlcon);
        try
        {
            Sqlcom.ExecuteNonQuery();
            return true;
        }
        catch
        {
            return false;
        }
        finally
        {
            Sqlcon.Close();
        }
    }

表为webabout:nFile为int,nTitle为nvarchar,nHtmlText为ntext,ncode为int,


为什么提示添加成功,数据库却为空 --------------------编程问答-------------------- 上次不是给你说嘛?
'" + dbobj.getautoNum("webabout", "nFile") + "'这个到底什么意思?函数吗?如果是,是不能这样拼接的 --------------------编程问答-------------------- 代码都自欺欺人地try...catch了,都隐藏异常了,你还能发现异常?

代码在bebug下,一旦有异常,vs调试器就应该直接停在出现异常的语句上,而且异常堆栈窗口就直接描述具体的异常提示,这才是调试开发。

那种胡写try..catch的,我觉得应该直接pass掉。这种try...catch的代码,加上一些公司老板为了省钱而不投资做大规模的软件手工测试,于是往往在发布是才在用户面前丢人现眼出现问题。一旦软件到了这种地步,假设这时候我去处理这种难堪的状况,唯一的办法就是“舍得下脸来”要求开发人员把所有的try..catch删掉,让程序在用户操作时尽可能详细打印错误行号和异常堆栈信息,然后让程序员赶紧修改。

其实最好的办法,就是在开发时禁止胡写try...catch代码,尽早让(迟早会抛出来的)bug早点出现。 --------------------编程问答--------------------   public int getautoNum(string P_str_table, string P_str_tbColumn)
    {
        int Num;
        DataSet myds = GetDataSet("select top 1 * from " + P_str_table + " order by " + P_str_tbColumn + "  desc ", P_str_table);
        if (myds.Tables[0].DefaultView.Count != 0) Num = Convert.ToInt32(myds.Tables[0].Rows[0][P_str_tbColumn]) + 1;
        else Num = 1;
        return Num;
    } --------------------编程问答-------------------- 你写的try...catch,使得调试器不能定位异常代码,也不中断(而是带病继续工作)。而你调用dbobj.getcom的代码也是带病工作。

你的这两处代码都是在明明有异常时表面上自欺欺人地继续工作,只会把系统数据搞乱,后边再发现乱子的时候,你根本不知道该到哪一条语句上去修改bug了! --------------------编程问答--------------------
引用 3 楼  的回复:
  public int getautoNum(string P_str_table, string P_str_tbColumn)
    {
        int Num;
        DataSet myds = GetDataSet("select top 1 * from " + P_str_table + " order by " + P_str_tbColumn + "……


  string intoSQL = "";
  int ncode= dbobj.getautoNum("webabout", "nFile");//不是整数嘛?为什么加单引号
  intoSQL = "insert into webabout (nFile,nTitle,nHtmlText,ncode) values (";
  intoSQL += "" + myClass.replace(txtid.Text) + ",";
  intoSQL += "'" + myClass.replace(txtitle.Text) + "',";
  intoSQL += "'" + txtContent.Text + "',";
  intoSQL += "" +ncode+ ")";
  dbobj.getcom("insert into " + intoSQL);
  Page.RegisterStartupScript("alert", @"<script LANGUAGE=JavaScript>alert('添加成功');window.location='about.aspx';</script>"); --------------------编程问答-------------------- 究其根源,就是滥用try...catch....,只为了让程序继续执行,这种编程思想问题。

建议你找一个正规的软件开发团队学习一些经过了大规模考验的编程知识,那样就可以提高素质,避免这类代码。 --------------------编程问答--------------------
引用 6 楼  的回复:
究其根源,就是滥用try...catch....,只为了让程序继续执行,这种编程思想问题。

建议你找一个正规的软件开发团队学习一些经过了大规模考验的编程知识,那样就可以提高素质,避免这类代码。

同意,try...catch不要随便用,因为如果出错了,看不到源错误 --------------------编程问答-------------------- 还是没添加成功
--------------------编程问答--------------------
引用 8 楼  的回复:
还是没添加成功

先调试sql语句对不对?把所有的try...catch注释了调试 --------------------编程问答--------------------
引用 8 楼  的回复:
还是没添加成功


晕!

给你写代码吧:
public void getcom(string M_str_Sqlstr)
{
  using(SqlConnection Sqlcon = this.getcon())
  {
    Sqlcon.Open();
    SqlCommand Sqlcom = new SqlCommand(M_str_Sqlstr, Sqlcon);
    Sqlcom.ExecuteNonQuery();
  }
}
这样你就能开始学会调试程序、知道自己怎样改进程序代码了。 --------------------编程问答-------------------- 女程序员,说不定是个女程序员!
呵呵呵 --------------------编程问答--------------------
引用 11 楼  的回复:
女程序员,说不定是个女程序员!
呵呵呵

你猜到了
p哥有经验? --------------------编程问答-------------------- try catch 还是可以用的,
 可能写入 日志文件中,也可以写到数据库中啊,
也可以写时 各变量都记录下来。

当然 调试时不用 try catch --------------------编程问答--------------------
引用 11 楼  的回复:
女程序员,说不定是个女程序员!
呵呵呵


——这席话,瞬间让我改变了对楼主的负面想法....
对楼主 负面的印象 开始抬高....

——当我进入楼主的博客:男的,楼主在我心目中的形象再次急速坠落到地上....


—————————————————————————————————————
我记得。我写过一个 小程序,导入 80G,总计 几千万行要导入到数据库,我当时就没有写一行 try-catch  程序内存也没有爆掉:不依靠 try-catch 写出稳定代码 会让一个程序员觉得非常自豪(当然,这个项目 也算简单,代码也不很多)

try-catch 是种病.....
--------------------编程问答-------------------- 拼接SQL 语句,也不是很标准: .Net  不是支持 参数化 的 SQL 语句么?? --------------------编程问答-------------------- dbobj.getcom("insert into " + intoSQL);
Page.RegisterStartupScript("alert", @"<script LANGUAGE=JavaScript>alert('添加成功');window.location='about.aspx';</script>");
=========
getcom没有判断返回值,所以不论插入是否成功,都会提示成功
调试阶段还是把return false改成throw吧。。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,