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

时间:2021-10-30 21:27:40
 private  void save()
        {
            try
            {
                int i = 0;
                DataTable dt = (DataTable)this.dgvlist.DataSource;
          
                this.dgvlist.DataSource = Dto.ToArray();
              
                foreach (DataRow r in dt.Rows)
                {
                    if (r.RowState == DataRowState.Modified)
                    {
                       int id = DataConverter.ToInt(r["id"]);
                        if (entity.inputdeptid > 0)
                        {
                            int userid = DataConverter.ToInt(r["userid"]);
                            Decimal moneys = DataConverter.ToDecimal(r["moneys"]);
                            String months = DataConverter.ToDateTime(r["months"]).ToString("yyyy-MM-dd");
                            String username = DataConverter.EyeNull(r["user_name"]);

                            if (entity.id > 0)
                            {
                                dal.UpdateData(entity.moneys, entity.months, entity.username);
                            }
                        }
                        else
                        {
                            //审核
                            dal.SaveApply2(id, 2);

                        }
                        i++;
                    }
                }
                if (i > 0)
                {
                    throw new Exception("更新了" + i.ToString() + "行记录!");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

在dt.Rows出现未将对象引用设置到对象的实例 (System.NullReferenceException),要怎么将它判断不为空啊

  private void Querydgvlist()//
        {
            string months = DataConverter.EyeNull(cbotime.SelectedValue);
            string sql, err;
            int deptid = DataConverter.ToInt(cbodept.SelectedValue);

            DataTable dt = new DataTable();
            sql = string.Format(@"
                    SELECT a.months, b.dept_code ,b.dept_name ,
                            c.user_code , isnull(c.user_name,username) as user_name,a.moneys
                            ,a.userid,a.deptid,a.id,a.RecordUser,a.RecordTime,a.iscw
                        FROM {0}  a 
                        inner join {1} b on a.deptid=b.deptid
                        left outer join {2} c on c.userid=a.userid                           
                        where a.months='{3}'                      
                        ", TableName, Tables.tbDeptList, Tables.tbuser, months);

            if (entity.deptid > 0)
            {
                sql += " and a.inputdeptid=" + entity.deptid;
            }
            sql += " order by c.user_code ";

            dt = SqlHelper.QueryFromDatabase(ThisConn.sCono, sql, out err);
            if (err.Length > 0)
            {
                MessageBox.Show(err);
                return;
            }

            if (dt.Select("iscw=0").Length > 0 && deptid > 0)
            {
                btnsubmit.Show();
            }

            this.dgvlist.DataSource = dt;
            dgvlist.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            lblist.Text = "上报明细:" + dt.Rows.Count.ToString() + "行, 人数:" + dt.Rows.Count.ToString() + ",科室总奖金:" + DataConverter.ToDecimal(dt.Compute("sum(moneys)", "")).ToString("") + "元";

            if (entity.deptid > 0)
            {
                this.dgvlist.ReadOnly = false;
            }
        }

这个代码段会出现public_dept_list 是什么原因啊?

20 个解决方案

#1


dt对象为null吧,Debug模式调试下代码。简单的用if语句判断一下,不懂或者没用过去网上搜搜。

#2


dt = SqlHelper.QueryFromDatabase(ThisConn.sCono, sql, out err); 调试下这句看看dt对象。。。

#3


dt为null了吧

#4


查询失败了

#5


对啊,我找到错误了,就是不知道怎么改"\r\n                    SELECT a.months, b.dept_code ,b.dept_name ,\r\n                            c.user_code , isnull(c.user_name,a.username) as user_name,a.moneys\r\n                            ,a.userid,a.deptid,a.id,a.RecordUser,a.RecordTime\r\n                        FROM Records_Moneys  a \r\n                        inner join public_dept_list b on a.deptid=b.deptid\r\n                        left outer join public_user_list c on c.userid=a.userid                           \r\n                        where a.months=''  and a.iscw=2                    \r\n                         order by c.user_code "
是不是把那个 inner join public_dept_list b on a.deptid=b.deptid\r\n      改为 inner join tbdeptlist b on a.deptid=b.deptid\r\n? tbdeptlist 是数据库表名,我不会join的使用

#6


查询什么表,是由业务需要决定的,岂可是你能随随便便就换一个的?

查看数据库的错误信息,他会告诉你哪儿写的不合适

#7


在DataTable dt = (DataTable)this.dgvlist.DataSource; 后增加如下代码
if(dt==null)
return;
或if (dt!=null)
{
  你的DataTable dt = (DataTable)this.dgvlist.DataSource;这句后面的代码。

}

#8


最好把DataTable dt=new DataTable();设置成全局的
我之前也遇到过类似的问题,很蛋疼

#9


引用 6 楼 xuzuning 的回复:
查询什么表,是由业务需要决定的,岂可是你能随随便便就换一个的?

查看数据库的错误信息,他会告诉你哪儿写的不合适

可是如果我把a,b,c的指示的数据表改了不就行了吗?

#10


a,b,c 不是什么指示的数据表
而是你给数据表取的别名(目的是少按几个键)
换了表,字段名也要换,如果所有的表都是一样的,那么要弄那些表做什么?

#11


好吧,最后把数据表的名字改了就有了, where =''这句话的意思是a.months为空,还是a.months是任意一个值?

#12


引用 11 楼 qq_32320747 的回复:
好吧,最后把数据表的名字改了就有了, where =''这句话的意思是a.months为空,还是a.months是任意一个值?

 where a.months='{3}'      

#13


string.Format(@" ....
where a.months=' {3}'                      
                        ", TableName, Tables.tbDeptList,  Tables.tbuser, months);

#14


引用 13 楼 xuzuning 的回复:
string.Format(@" ....
where a.months=' {3}'                      
                        ", TableName, Tables.tbDeptList,  Tables.tbuser, months);

不对啊,那个是逗号,    where a.months='{3}'                      
                        ", TableName, Tables.tbDeptList, Tables.tbuser, months);
这个的意思不是在表Tables.tbDeptList, Tables.tbuser,中匹配条件后返回months吗?

#15


噢,还真是逗号,眼花了
            sql = string.Format(@"
                    SELECT a.months, b.dept_code ,b.dept_name ,
                            c.user_code , isnull(c.user_name,username) as user_name,a.moneys
                            ,a.userid,a.deptid,a.id,a.RecordUser,a.RecordTime,a.iscw
                        FROM {0}  a 
                        inner join {1} b on a.deptid=b.deptid
                        left outer join {2} c on c.userid=a.userid                           
                        where a.months='{3}'                      
                        ", TableName, Tables.tbDeptList, Tables.tbuser, months);
只是格式化一个字符串,将模板中的 {0},{1}...依次用后边的参数替换
即:
{0} 替换成 TableName 的值
{1} 替换成 Tables.tbDeptList 的值
{2} 替换成 Tables.tbuser 的值
{3} 替换成 months 的值
并没有额外的功能

#16


引用 15 楼 xuzuning 的回复:
噢,还真是逗号,眼花了
            sql = string.Format(@"
                    SELECT a.months, b.dept_code ,b.dept_name ,
                            c.user_code , isnull(c.user_name,username) as user_name,a.moneys
                            ,a.userid,a.deptid,a.id,a.RecordUser,a.RecordTime,a.iscw
                        FROM {0}  a 
                        inner join {1} b on a.deptid=b.deptid
                        left outer join {2} c on c.userid=a.userid                           
                        where a.months='{3}'                      
                        ", TableName, Tables.tbDeptList, Tables.tbuser, months);
只是格式化一个字符串,将模板中的 {0},{1}...依次用后边的参数替换
即:
{0} 替换成 TableName 的值
{1} 替换成 Tables.tbDeptList 的值
{2} 替换成 Tables.tbuser 的值
{3} 替换成 months 的值
并没有额外的功能

蟹蟹

#17


if(dt != null)在进入循环

#18


if(dt!=null && dt.rows.count>1)
{

}

#19



   private void FrmRecords_Money_Load(object sender, EventArgs e)
        {
            try
            {
                string listname = Share1.deptid + Share1.dept_code + Share1.dept_name;
                dal.Load(entity.deptid, listname);

                if (inputdeptid > 0)//判断是否为财务科?
                {
                    btnImport.Show();
                    btnsetuser2.Show();
                    btnsetuser.Show();
                    btndelete.Show();
                    btnsave.Show();
                    tabControl1.TabPages.Remove(tabPage3);//使tabControl1不显示
                    tabControl1.TabPages.Remove(tabPage5);
                }
                else
                {
                    btnImport.Hide();
                    btnsetuser2.Hide();
                    btnsetuser.Hide();
                    btndelete.Hide();
                    btnsave.Hide();

                    DataRow r;
                    r = dt.NewRow();
                    r["deptid"] = 0;
                    r["listname"] = "所有";
                    dt.Rows.InsertAt(r, 0);
                }

                cbodept.DataSource = dt;
                cbodept.DisplayMember = dt.Columns["listname"].ToString();//未将对象引用到实例
                cbodept.ValueMember = dt.Columns["deptid"].ToString();
                cbodept.SelectedValue = inputdeptid;

                entity.RecordUser = Share1.user_code + Share1.user_name;
                DataTable dttime = DataConverter.GetMonthsList(DataConverter.ToDateTime("2018-01-01"), DateTime.Now.Date);
                cbotime.DataSource = dttime;
                cbotime.DisplayMember = dttime.Columns["monthsname"].ToString();
                cbotime.ValueMember = dttime.Columns["months"].ToString();
                cbotime.SelectedValue = DateTime.Now.AddMonths(-2).ToString("yyyy-MM-01");//两个月之内的记录

                bselect = true;
                btnQuery_Click(sender, e);
            }
            catch (Exception ex)
            {
                ThisHQ.Base.Base.SuMsg(ex.Message);
            }
       
        }

 public List<DataContract.ClinicInCharge.Records_Moneys> Load(int deptid,string listname)
        {
            string sql, err;
            sql = string.Format(@"select deptid,dept_code + dept_name as listname 
                       from {0} where isuse=1 and duty=1 ", Tables.tbDeptList);
            sql += " order by dept_code";
            DataTable dt = SqlHelper.QueryFromDatabase(ThisConn.sCono, sql, out err);
          
            SqlHelper.ExecuteSQL(ThisConn.sCono, sql, out err);
            if (err.Length > 0)
            {
                throw new Exception(err);
            }
            return DataConverter.DataTableToIList<DataContract.ClinicInCharge.Records_Moneys>(dt).ToList();
        }

我又出现这样子的问题了,这次是为什么啊,要求要将数据库语言保存到另外的类里面然后我又不可以了

#20


未将对象引用设置到实例

#1


dt对象为null吧,Debug模式调试下代码。简单的用if语句判断一下,不懂或者没用过去网上搜搜。

#2


dt = SqlHelper.QueryFromDatabase(ThisConn.sCono, sql, out err); 调试下这句看看dt对象。。。

#3


dt为null了吧

#4


查询失败了

#5


对啊,我找到错误了,就是不知道怎么改"\r\n                    SELECT a.months, b.dept_code ,b.dept_name ,\r\n                            c.user_code , isnull(c.user_name,a.username) as user_name,a.moneys\r\n                            ,a.userid,a.deptid,a.id,a.RecordUser,a.RecordTime\r\n                        FROM Records_Moneys  a \r\n                        inner join public_dept_list b on a.deptid=b.deptid\r\n                        left outer join public_user_list c on c.userid=a.userid                           \r\n                        where a.months=''  and a.iscw=2                    \r\n                         order by c.user_code "
是不是把那个 inner join public_dept_list b on a.deptid=b.deptid\r\n      改为 inner join tbdeptlist b on a.deptid=b.deptid\r\n? tbdeptlist 是数据库表名,我不会join的使用

#6


查询什么表,是由业务需要决定的,岂可是你能随随便便就换一个的?

查看数据库的错误信息,他会告诉你哪儿写的不合适

#7


在DataTable dt = (DataTable)this.dgvlist.DataSource; 后增加如下代码
if(dt==null)
return;
或if (dt!=null)
{
  你的DataTable dt = (DataTable)this.dgvlist.DataSource;这句后面的代码。

}

#8


最好把DataTable dt=new DataTable();设置成全局的
我之前也遇到过类似的问题,很蛋疼

#9


引用 6 楼 xuzuning 的回复:
查询什么表,是由业务需要决定的,岂可是你能随随便便就换一个的?

查看数据库的错误信息,他会告诉你哪儿写的不合适

可是如果我把a,b,c的指示的数据表改了不就行了吗?

#10


a,b,c 不是什么指示的数据表
而是你给数据表取的别名(目的是少按几个键)
换了表,字段名也要换,如果所有的表都是一样的,那么要弄那些表做什么?

#11


好吧,最后把数据表的名字改了就有了, where =''这句话的意思是a.months为空,还是a.months是任意一个值?

#12


引用 11 楼 qq_32320747 的回复:
好吧,最后把数据表的名字改了就有了, where =''这句话的意思是a.months为空,还是a.months是任意一个值?

 where a.months='{3}'      

#13


string.Format(@" ....
where a.months=' {3}'                      
                        ", TableName, Tables.tbDeptList,  Tables.tbuser, months);

#14


引用 13 楼 xuzuning 的回复:
string.Format(@" ....
where a.months=' {3}'                      
                        ", TableName, Tables.tbDeptList,  Tables.tbuser, months);

不对啊,那个是逗号,    where a.months='{3}'                      
                        ", TableName, Tables.tbDeptList, Tables.tbuser, months);
这个的意思不是在表Tables.tbDeptList, Tables.tbuser,中匹配条件后返回months吗?

#15


噢,还真是逗号,眼花了
            sql = string.Format(@"
                    SELECT a.months, b.dept_code ,b.dept_name ,
                            c.user_code , isnull(c.user_name,username) as user_name,a.moneys
                            ,a.userid,a.deptid,a.id,a.RecordUser,a.RecordTime,a.iscw
                        FROM {0}  a 
                        inner join {1} b on a.deptid=b.deptid
                        left outer join {2} c on c.userid=a.userid                           
                        where a.months='{3}'                      
                        ", TableName, Tables.tbDeptList, Tables.tbuser, months);
只是格式化一个字符串,将模板中的 {0},{1}...依次用后边的参数替换
即:
{0} 替换成 TableName 的值
{1} 替换成 Tables.tbDeptList 的值
{2} 替换成 Tables.tbuser 的值
{3} 替换成 months 的值
并没有额外的功能

#16


引用 15 楼 xuzuning 的回复:
噢,还真是逗号,眼花了
            sql = string.Format(@"
                    SELECT a.months, b.dept_code ,b.dept_name ,
                            c.user_code , isnull(c.user_name,username) as user_name,a.moneys
                            ,a.userid,a.deptid,a.id,a.RecordUser,a.RecordTime,a.iscw
                        FROM {0}  a 
                        inner join {1} b on a.deptid=b.deptid
                        left outer join {2} c on c.userid=a.userid                           
                        where a.months='{3}'                      
                        ", TableName, Tables.tbDeptList, Tables.tbuser, months);
只是格式化一个字符串,将模板中的 {0},{1}...依次用后边的参数替换
即:
{0} 替换成 TableName 的值
{1} 替换成 Tables.tbDeptList 的值
{2} 替换成 Tables.tbuser 的值
{3} 替换成 months 的值
并没有额外的功能

蟹蟹

#17


if(dt != null)在进入循环

#18


if(dt!=null && dt.rows.count>1)
{

}

#19



   private void FrmRecords_Money_Load(object sender, EventArgs e)
        {
            try
            {
                string listname = Share1.deptid + Share1.dept_code + Share1.dept_name;
                dal.Load(entity.deptid, listname);

                if (inputdeptid > 0)//判断是否为财务科?
                {
                    btnImport.Show();
                    btnsetuser2.Show();
                    btnsetuser.Show();
                    btndelete.Show();
                    btnsave.Show();
                    tabControl1.TabPages.Remove(tabPage3);//使tabControl1不显示
                    tabControl1.TabPages.Remove(tabPage5);
                }
                else
                {
                    btnImport.Hide();
                    btnsetuser2.Hide();
                    btnsetuser.Hide();
                    btndelete.Hide();
                    btnsave.Hide();

                    DataRow r;
                    r = dt.NewRow();
                    r["deptid"] = 0;
                    r["listname"] = "所有";
                    dt.Rows.InsertAt(r, 0);
                }

                cbodept.DataSource = dt;
                cbodept.DisplayMember = dt.Columns["listname"].ToString();//未将对象引用到实例
                cbodept.ValueMember = dt.Columns["deptid"].ToString();
                cbodept.SelectedValue = inputdeptid;

                entity.RecordUser = Share1.user_code + Share1.user_name;
                DataTable dttime = DataConverter.GetMonthsList(DataConverter.ToDateTime("2018-01-01"), DateTime.Now.Date);
                cbotime.DataSource = dttime;
                cbotime.DisplayMember = dttime.Columns["monthsname"].ToString();
                cbotime.ValueMember = dttime.Columns["months"].ToString();
                cbotime.SelectedValue = DateTime.Now.AddMonths(-2).ToString("yyyy-MM-01");//两个月之内的记录

                bselect = true;
                btnQuery_Click(sender, e);
            }
            catch (Exception ex)
            {
                ThisHQ.Base.Base.SuMsg(ex.Message);
            }
       
        }

 public List<DataContract.ClinicInCharge.Records_Moneys> Load(int deptid,string listname)
        {
            string sql, err;
            sql = string.Format(@"select deptid,dept_code + dept_name as listname 
                       from {0} where isuse=1 and duty=1 ", Tables.tbDeptList);
            sql += " order by dept_code";
            DataTable dt = SqlHelper.QueryFromDatabase(ThisConn.sCono, sql, out err);
          
            SqlHelper.ExecuteSQL(ThisConn.sCono, sql, out err);
            if (err.Length > 0)
            {
                throw new Exception(err);
            }
            return DataConverter.DataTableToIList<DataContract.ClinicInCharge.Records_Moneys>(dt).ToList();
        }

我又出现这样子的问题了,这次是为什么啊,要求要将数据库语言保存到另外的类里面然后我又不可以了

#20


未将对象引用设置到实例

#21