C#萌新遇到了“未将对象引用到对象实例”的问题 希望大佬指点一下

选修的数据库课程用C#做一个前端实现数据库的更改和删除,刚开始学照着书敲了一段代码,运行的时候点击更改就会出现以下错误提示,是我的数据库连接有什么问题吗?求教各位大佬 图片说明

c#

4个回答

代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace FFFinalhomework
{
public partial class 管理界面 : Form
{
private SqlConnection mycon;
private SqlDataAdapter myada;
private SqlCommand mycomd;
private SqlCommandBuilder mycbd;
private DataSet myset;

    public 管理界面()
    {
        InitializeComponent();
        mycon = new SqlConnection("Data Source=DESKTOP-LBROENH;Initial Catalog=Finalhomework;Integrated Security=True");
        mycon.Open();
        mycomd = new SqlCommand("select*from DongMan", mycon);
        myada = new SqlDataAdapter();
        myada.SelectCommand = mycomd;
        mycbd = new SqlCommandBuilder(myada);
        myset = new DataSet();
        myada.TableMappings.Add("DongMan", "DongMan");
        myada.TableMappings[0].ColumnMappings.Add("D#", "动漫编号");
        myada.TableMappings[0].ColumnMappings.Add("DN", "动漫名称");
        myada.TableMappings[0].ColumnMappings.Add("DT", "动漫类型");
        myada.TableMappings[0].ColumnMappings.Add("DP", "主演声优");
        myada.TableMappings[0].ColumnMappings.Add("DD", "上映日期");



    }

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            myada.Update(myset.Tables["DongMan"].GetChanges());
            MessageBox.Show("数据修改成功", "666");
            myset.Tables["student"].AcceptChanges();
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
    private void 管理界面_Load(object sender, EventArgs e)
    {
        try
        {
            myada.Fill(myset, "DongMan");
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.ToString());
        }
        finally
        {
            mycon.Close();
        }
        dataGridView1.DataSource = myset.Tables["DongMan"].DefaultView;

    }

    private void button2_Click(object sender, EventArgs e)
    {
        if (MessageBox.Show("确认删除当前行数据?", "", MessageBoxButtons.OKCancel) == DialogResult.OK)
        {
            try
            {
                myset.Tables[0].Rows[dataGridView1.CurrentRow.Index].Delete();
                if (myset != null && myset.Tables.Count > 0)
                {
                    myada.Update(myset.Tables[0].GetChanges());
                    MessageBox.Show("数据删除成功");
                    myset.Tables[0].AcceptChanges();
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        else
        {
            myset.Tables[0].RejectChanges();
        }

    }

    private void 管理界面_Load_1(object sender, EventArgs e)
    {
        // TODO: 这行代码将数据加载到表“finalhomeworkDataSet.DongMan”中。您可以根据需要移动或删除它。
        this.dongManTableAdapter.Fill(this.finalhomeworkDataSet.DongMan);

    }
}

}

你的catch语句指定了具体的异常,所以只会处理这个异常,很显然是出现了其他异常所以直接报错了,你可以把这个异常写成Exception,所有的异常都处理就好了。

peterfeifei
peterfeifei 好的 我试一下 多谢
大约 2 年之前 回复

这个异常的意思就是 你有不能为空的值为空了 他提示了那个位置 加个断点看一下

peterfeifei
peterfeifei 额。。不太会看 大概是myada.Update(myset.Tables["DongMan"].GetChanges());里面的myset?但是我不理解为什么会是null
大约 2 年之前 回复

myada = new SqlDataAdapter();
myada.SelectCommand = mycomd;
mycbd = new SqlCommandBuilder(myada);
myset = new DataSet();
这个地方啊,我用SqlLite写的时候一般还要有一句
myada.Fill( myset);//意思是sql语句查出来大数据,填到表里
你这里没有这句,不知道是不是原因(不过如果你是照课本敲的,应该不会犯这种低级错误)

我建议你,把这句myada.Update(myset.Tables["DongMan"].GetChanges())改下;
var t=myset.Tables["DongMan"];
var changes=myset.Tables["DongMan"].GetChanges();
加断点,看看到底哪里是空
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问