黑马程序员技术交流社区

标题: 请问这个问题该如何解决、、、、、、 [打印本页]

作者: 魏桓基    时间: 2014-5-7 16:45
标题: 请问这个问题该如何解决、、、、、、
“/myBLog”应用程序中的服务器错误。

未将对象引用设置到对象的实例。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:


行 193:                                        + r_title.Text +"','"+ r_content.Value +"','"+System.DateTime.Now +"','"+Request.QueryString["id"]+"')";
行 194:                                        SqlCommand ST_myCmd = new SqlCommand(ST_sql,ST_myConn);
行 195:                    ST_myConn.Open();
行 196:                                        ST_myCmd.ExecuteNonQuery();
行 197:                                        ST_myConn.Close();

源文件: d:\TestWeb\myBLog\ST_show.aspx.cs    行: 195

堆栈跟踪:


[NullReferenceException: 未将对象引用设置到对象的实例。]
   ST_GROUP.Blog.ST_show.replay_Click(Object sender, EventArgs e) in d:\TestWeb\myBLog\ST_show.aspx.cs:195
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563
       
源代码
        protected void replay_Click(object sender, System.EventArgs e)
                {

                        if (IsPostBack)
                        {
                                if (r_nick.Text.Trim()== "" || r_title.Text.ToString().Trim()== "" || r_content.Value.Trim()== "")
                                {
                                        Response.Write("<div align=center><li>昵称,标题,内容不能为空!</li><li><a href=javascript:history.back()>点此返回</a>");
                                        Response.End();
                                }
                                else
                                {
                                        string ST_sql = "insert into ST_replay (ST_r_nick,ST_r_title,ST_r_content,ST_r_date,ST_n_id) values ('"+ r_nick.Text +"','"
                                        + r_title.Text +"','"+ r_content.Value +"','"+System.DateTime.Now +"','"+Request.QueryString["id"]+"')";
                                        SqlCommand ST_myCmd = new SqlCommand(ST_sql,ST_myConn);
                    ST_myConn.Open();//错误指向处
                                        ST_myCmd.ExecuteNonQuery();
                                        ST_myConn.Close();
                                        ST_add_Re();
                                        Response.Redirect(""+Request.QueryString["id"]+".aspx");
                                }
                        }


作者: continue     时间: 2014-5-7 18:39
我猜也许是这两个问题中一个
1、连接字符串的问题
2、数据库的服务是否打开

作者: 魏桓基    时间: 2014-5-8 16:40
cuixm66 发表于 2014-5-8 12:55
“未将对象引用设置到对象的实例”一般都是对象为空,或未实例化对象,请确认你的SqlConnection对象的定义 ...

/// <summary>
                /// 获得评论。
                /// </summary>
                public void ST_get_Replay()
                {
                        Response.Write ("<table width=100% border=0 cellspacing=0 cellpadding=0>");
            SqlCommand ST_myCmd = new SqlCommand("select * from ST_replay where ST_n_id=" + Request.QueryString["id"] + "", ST_myConn);
                        ST_myConn.Open();
                        SqlDataReader ST_read = ST_myCmd.ExecuteReader();
                        while (ST_read.Read())
                        {
                                Response.Write ("<tr height=25><td  bgcolor=eeeeee><div align=center><font style='FONT-SIZE: 12px' color=red>"+ ST_read[2].ToString() +"</font></div></td></tr><tr height=30><td><font style='FONT-SIZE: 12px'>"+ ST_read[3].ToString() +"</font></td></tr><tr><td bgcolor=f8f8f8><div align=right><font style='FONT-SIZE: 12px'>"+ ST_read[1].ToString() +"评论于"+ ST_read[4].ToString() +"</font></div></td></tr>");

                        }
                        Response.Write ("</table>");
                        ST_myConn.Close();

                }
可是我的上一个方法中的ST_myConn.Open();都能打开数据库,其实我主要是ST_myConn.Open();不能执行,我就搞不清楚为什么上个方法中的同一条可以执行,到这里却不能了
作者: Mekor    时间: 2014-5-8 17:16
魏桓基 发表于 2014-5-8 16:40
///
                /// 获得评论。
                ///

连接数据库字符串呢???我怎么没看见?????写在哪里了啊,亲。不;连接怎么查数据库啊、。
作者: Mekor    时间: 2014-5-8 17:19
建议:
1.数据库连接使用SQLDBHelper
2.使用三层,更利于查看修改
3.写注释啊,亲。这样自己一看就差不多知道了错误在哪里
作者: /fendou    时间: 2014-5-8 21:58
/// <summary>
                 /// 获得评论。
                /// </summary>
                 public void ST_get_Replay()
                 {
                         Response.Write ("<table width=100% border=0 cellspacing=0 cellpadding=0>");
             SqlCommand ST_myCmd = new SqlCommand("select * from ST_replay where ST_n_id=" + Request.QueryString["id"] + "", ST_myConn);
                         ST_myConn.Open();
                         SqlDataReader ST_read = ST_myCmd.ExecuteReader();
                         while (ST_read.Read())
                         {
                                 Response.Write ("<tr height=25><td  bgcolor=eeeeee><div align=center><font style='FONT-SIZE: 12px' color=red>"+ ST_read[2].ToString() +"</font></div></td></tr><tr height=30><td><font style='FONT-SIZE: 12px'>"+ ST_read[3].ToString() +"</font></td></tr><tr><td bgcolor=f8f8f8><div align=right><font style='FONT-SIZE: 12px'>"+ ST_read[1].ToString() +"评论于"+ ST_read[4].ToString() +"</font></div></td></tr>");

                         }
                         Response.Write ("</table>");
                         ST_myConn.Close();

                 }

你的ST_myConn在哪定义的?放到了所有方法的外面?
作者: 魏桓基    时间: 2014-5-8 22:18
/fendou 发表于 2014-5-8 21:58
///
                 /// 获得评论。
                ///

在前面定义的全局变量!
作者: /fendou    时间: 2014-5-8 23:07
上次 打开 关闭的代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2