A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

“/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");
                                }
                        }

7 个回复

倒序浏览
我猜也许是这两个问题中一个
1、连接字符串的问题
2、数据库的服务是否打开
回复 使用道具 举报
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();不能执行,我就搞不清楚为什么上个方法中的同一条可以执行,到这里却不能了
回复 使用道具 举报
魏桓基 发表于 2014-5-8 16:40
///
                /// 获得评论。
                ///

连接数据库字符串呢???我怎么没看见?????写在哪里了啊,亲。不;连接怎么查数据库啊、。
回复 使用道具 举报
建议:
1.数据库连接使用SQLDBHelper
2.使用三层,更利于查看修改
3.写注释啊,亲。这样自己一看就差不多知道了错误在哪里

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
/// <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在哪定义的?放到了所有方法的外面?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
/fendou 发表于 2014-5-8 21:58
///
                 /// 获得评论。
                ///

在前面定义的全局变量!
回复 使用道具 举报
上次 打开 关闭的代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马