注册 登录
编程论坛 ASP.NET技术论坛

System.NullReferenceException: 未将对象引用设置到对象的实例。

水晶心 发布于 2010-08-10 11:23, 3115 次点击
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class adminmofiy : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      
            string str = ConfigurationSettings.AppSettings["dsn"];
            SqlConnection cn = new SqlConnection(str);
            cn.Open();
          int straid = Convert.ToInt32(Request.QueryString["aid"].ToString());
            string mysql = "SELECT * FROM admin WHERE (aid =" + straid + ")";
            // SELECT * FROM Goods WHERE (GID = '10001')
            SqlCommand cm = new SqlCommand(mysql, cn);
            // = CommandType.StoredProcedure;
            //cm.Parameters.Add("@GID", SqlDbType.Int);
            //cm.Parameters["@GID"].Value = Convert.ToInt32(Request.QueryString["gid"].ToString());
            SqlDataReader dr = cm.ExecuteReader();
            if (dr.Read())
            {
               lbl_aid.Text = dr["aid"].ToString();
                T_aname.Text = dr["aname"].ToString();
                T_apassword.Text = dr["apassword"].ToString();
                T_apower.Text = dr["apower"].ToString();
                T_adep.Text = dr["adep"].ToString();
               
            }
            else
            {
                Response.Write("对不起,没有该人员信息");
                Response.End();
            }

        }
int straid = Convert.ToInt32(Request.QueryString["aid"].ToString());这一行报错
18 回复
#2
烟雨袅袅2010-08-10 12:35
查看网页的地址栏,看看地址里有没有   ?aid=5 之类的
#3
bygg2010-08-10 13:18
Request.QueryString["aid"] 确定这个不是空的吗?
#4
水晶心2010-08-10 15:09
我试试
#5
冰镇柠檬汁儿2010-08-10 15:54
if (Request.QueryString["aid"] != null)
{
    int straid = Convert.ToInt32(Request.QueryString["aid"].ToString());
}
首先做一下是否为null的判断,记得再判断下值是否是数字,这些判断很重要,如果不符合要求,就不要执行代码
#6
水晶心2010-08-11 09:15
aid 好像是空的,怎么办啊,是不是数据库连接有问题
#7
水晶心2010-08-11 09:25
数据库连接没有问题我试过了。
当前上下文中不存在名称“straid”
 int straid = Convert.ToInt32(Request.QueryString["aid"].ToString());
行 24:             }
行 25:             string mysql = "SELECT * FROM admin WHERE (aid =" + straid + ")";
行 26:             // SELECT * FROM Goods WHERE (GID = '10001')
行 27:             SqlCommand cm = new SqlCommand(mysql, cn);
怎么回事啊,不太明白,高手帮帮吧
#8
bygg2010-08-11 09:30
3楼和5楼不是说了吗?在前面加个判断就得了。
如果传过来的aid是空,就不做下面的处理,显示个错误啥的不就行了??
#9
烟雨袅袅2010-08-11 13:32
int straid = Convert.ToInt32(Request.QueryString["aid"].ToString());
行 24:             }

从24行的 } 来看,估计straid是个局部变量,它的作用范围太小,不能被 string mysql = "SELECT * FROM admin WHERE (aid =" + straid + ")";引用
#10
bygg2010-08-11 13:34
LS明显在乱说。
#11
烟雨袅袅2010-08-11 13:35
以下是引用bygg在2010-8-11 09:30:34的发言:

3楼和5楼不是说了吗?在前面加个判断就得了。
如果传过来的aid是空,就不做下面的处理,显示个错误啥的不就行了??
楼主好像提出第二个问题,跟原来的问题不一样了
#12
烟雨袅袅2010-08-11 13:37
以下是引用bygg在2010-8-11 13:34:34的发言:

LS明显在乱说。
  有没有看到7楼的24行有个大括号,但是在楼主发贴原代码中没有,估计楼主的代码有改动过
楼主代码好像改成了这种形式
{ int straid = Convert.ToInt32(Request.QueryString["aid"].ToString());   }
 string mysql = "SELECT * FROM admin WHERE (aid =" + straid + ")";
所以出现当前上下文中不存在名称“straid



[ 本帖最后由 烟雨袅袅 于 2010-8-11 13:43 编辑 ]
#13
冰镇柠檬汁儿2010-08-11 14:19
看来楼主还真是对编程没了解,我给的代码是什么,自己都不带调整的……
再说Request.QueryString["aid"].ToString()用这个获取值,那么地址栏里有没有aid这个变量都是个问题。
#14
水晶心2010-08-12 10:54
报错:当前上下文中不存在名称“straid”
protected void Page_Load(object sender, EventArgs e)
    {
      
            string str = ConfigurationSettings.AppSettings["dsn"];
            SqlConnection cn = new SqlConnection(str);
            cn.Open();
            
            if (Request.QueryString["aid"] != null)
            {
                int straid = Convert.ToInt32(Request.QueryString["aid"].ToString());
            }
            else
            {
                Response.Write("对不起,没有该人员信息");
                Response.End();
            }
            string mysql = "SELECT * FROM admin WHERE (aid =" + straid + ")";
            // SELECT * FROM Goods WHERE (GID = '10001')
            SqlCommand cm = new SqlCommand(mysql, cn);
            // = CommandType.StoredProcedure;
            //cm.Parameters.Add("@GID", SqlDbType.Int);
            //cm.Parameters["@GID"].Value = Convert.ToInt32(Request.QueryString["gid"].ToString());
            SqlDataReader dr = cm.ExecuteReader();
            if (dr.Read())
            {
               lbl_aid.Text = dr["aid"].ToString();
                T_aname.Text = dr["aname"].ToString();
                T_apassword.Text = dr["apassword"].ToString();
                T_apower.Text = dr["apower"].ToString();
                T_adep.Text = dr["adep"].ToString();
               
            }
            else
            {
                Response.Write("对不起,没有该人员信息");
                Response.End();
            }

        }
这该怎么解决啊。我把判断加上了,不知道加的对不对啊。
#15
水晶心2010-08-12 11:01
本来就是菜鸟啊,对代码了解的是少,所以向各位高手请教啊。
#16
bygg2010-08-12 11:28
int straid
定义在if的上面.
程序代码:
int straid = 0;

 if (Request.QueryString["aid"] != null)
            {
                straid = Convert.ToInt32(Request.QueryString["aid"].ToString());
            }
            else
            {
                Response.Write("对不起,没有该人员信息");
                Response.End();
            }

你没看到别人的回复吗?
#17
zl406501942010-08-12 17:06
你URL里面没传过“aid”这个参数,Request.QueryString["aid"]自然是空了修改你的转向URL,如:www.
#18
NewDeveloper2010-08-13 15:33
我感觉应该是楼主直接运行这个网页了 所以导致这个错误  是应该加个NULL验证的
#19
谢成新2013-07-30 10:17
protected void Page_Load(object sender, EventArgs e)
        {

            if(!IsPostBack)
            {
               if(this.Request["option"]!=null)
               {
                   if (this.Request["option"] == "add")
                   {

                   }
                   else
                   {
                       this.BindBranchInfo();
                   }
               }
            }
        }


        private void BindBranchInfo()
        {
            string strsql = "select tb_branchId, tb_branchName,effective  from  t_Branch  where  tb_branchId= '" + this.Request["cCode"].ToString() + "'";
            DataTable dt = Db.GetDataTable(strsql);
            this.TBX_Branchcode.Text = dt.Rows[0]["tb_branchId"].ToString();
            this.TBX_Branchname.Text=dt.Rows[0]["tb_branchName"].ToString();
            this.DDL_effective.SelectedValue = dt.Rows[0]["effective"].ToString();
        }

        protected void Btn_Save_Click(object sender, EventArgs e)   //保存部门信息
        {
            if (this.TBX_Branchname.Text == "")
            {
                Response.Write("<script language=javascript>alert('您还没有填写部门名称!')</script>");
            }
            else

            {
                string str = "";
                if (this.Request["option"].ToString() == "add")
                {
                    str = "insert into t_Branch(tb_branchId,tb_branchName,effective) values('" +TBX_Branchcode.Text+ "','" + this.TBX_Branchname.Text + "','" + this.DDL_effective.SelectedValue+ "')";
                }
                else
                {
                    str = "update t_Branch  set tb_branchName='" + this.TBX_Branchname.Text + "' where  tb_branchId='"+this.Request["cCode"].ToString()+"'";
                }
               TowinCore.Db.ExecuteSQL(str);
                Cls_Message.ShowPageMessage("操作成功!", this.Page);
            }


        }
       if (this.Request["option"].ToString() == "add")这一行有错!
1