如题,直接上代码:
private void buttonDel_Click(object sender, EventArgs e)
        {
                 string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\\毕业设计\\ASSM.accdb";
           
            OleDbConnection connection = new OleDbConnection(connectionString);
            DialogResult dr = MessageBox.Show("确定要删除所选记录?  ", "Photonsoft", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (dr == DialogResult.OK)
            {
                    try
                    {                        connection.Open();//打开连接。
                        string id = "";   //此处的id是我的记录在数据库中的ID (唯一识别号) 。
                       
                        foreach (ListViewItem item in listView1.SelectedItems) //遍历已选中的记录。
                        {
                            for ( int i = 0; i < listView1.SelectedItems.Count; i++) // 在以选中的记录中遍历获取每个记录的id并删除之。
                            {
                                if (this.listView1.SelectedItems[i].Selected)     //如果第i行被选中的话,取得该选中行的索引号
                                {
                                    
                                    DataSet ds = new DataSet();
                                   id = ds.Tables["ASSM"].Rows[this.listView1.SelectedIndices[i]][0].ToString();   //获取选中的第i条记录在数据库中的id号。                                    string sql = string.Format("delete from notes where id='{0}'", id); //删除语句。                                    //string sql = "delete * from ASSM where id="ds.Tables["ASSM"].Rows[this.listView1.SelectedIndices[i]][0].ToString()"";
                                    OleDbCommand cmd = new OleDbCommand(sql, connection);
                                    cmd.ExecuteNonQuery(); //执行删除。
                                    cmd.Dispose();
                                    
                                                                  }
                            }
                        }                        listView1.Refresh(); //删除结束后刷新listView。
                    }                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }                      
                        
                        return ;
                                  }
           
                connection.Close();
                
                }我是参考http://blog.csdn.net/xingqingxiang/article/details/7086531这个博文做的,可是总是提示“未将对象引用设置到对象的实例”我不知道怎么办了,研究了好几天了,真心希望大家可以帮帮我。数据库C#listview未将对象引用设置到对象的实例

解决方案 »

  1.   

    id = ds.Tables["ASSM"].Rows[this.listView1.SelectedIndices[i]][0].ToString();   //获取选中的第i条记录在数据库中的id号。
    就是这行提示的“未将对象引用设置到对象的实例”。
    我开始想是不是自己数据库调用的时候内容是空的,但我运行程序时listview控件里是显示了数据库的信息的啊,这点我就糊涂不解了。
      

  2.   

    listview应该有一个selectItem你试试 这个
      

  3.   

    this.listView1.SelectedIndices[i]][0] 应该为null
      

  4.   


    selectItem?怎么试呢?上面if语句里有selectItems(if (this.listView1.SelectedItems[i].Selected) )
      

  5.   


    如果为null,那该怎么改呢?我刚接触C#,很多不懂,还请大哥赐教。
      

  6.   

    我也试着判断是否是Oledbdatareader返回有空值,但是不知道方法,参考了论坛上的帖子http://bbs.csdn.net/topics/320051827又报错。
      

  7.   

    一般就是对象没有实例化,或者对象为null,查下对象的来源,对象是否有值!
      

  8.   

    ds.Tables["ASSM"]是否有值?
    this.listView1.SelectedIndices[i]][0].ToString()这个的值是多少,单步调试看下就知道是那个出问题了
      

  9.   

    lz可以简单点先
    DataTable dt=ds.Tables["ASSM"];看下这个dt.Rows.Count是否有值,
    然后看下this.listView1.SelectedIndices[i]][0].ToString()这个的值是多少
      

  10.   

    DataSet ds = new DataSet();
    id = ds.Tables["ASSM"].Rows[this.listView1.SelectedIndices[i]][0].ToString();   //获取选中的第i条记录在数据库中的id号。
    这个ds是刚建的,你都没给赋值,那里头的table肯定是空的啊而且你连查询数据库语句都没有,怎么查看数据库记录啊??
    OleDbDataAdapter da = new OleDbDataAdapter();
                da.SelectCommand.CommandText = sql查询语句;
                da.Fill(ds);
      

  11.   


    OleDbDataAdapter da = new OleDbDataAdapter();
    da.SelectCommand.Connection = connection;
    da.SelectCommand.CommandText = sql查询语句;
    da.Fill(ds);
      

  12.   

    而且我运行程序的时候数据库里面的信息都全部显示到listview控件上了的
      

  13.   

    ds.Tables["ASSM"];你就检查下这个数据来源.为什么没有数据!具体为什么没有数据我就也不清楚了..这是你程序的问题
      

  14.   

    那个sql查询语句具体是指我的数据库的路径和名称("select * from ASSM")吗?我新手,望大哥指教哈。
      

  15.   

    对,,,sql语句就是  select语句
      

  16.   

    ds.Tables["ASSM"]
    这个数据集中的数据表是否为空,
    listview中是否有选中的行
      

  17.   


     try
                        {
                            
                            
                            string id = "";   //此处的id是我的记录在数据库中的ID (唯一识别号) 。
                           
                            foreach (ListViewItem item in listView1.SelectedItems) //遍历已选中的记录。
                            {
                                for ( int i = 0; i < listView1.SelectedItems.Count; i++) // 在以选中的记录中遍历获取每个记录的id并删除之。
                                {
                                    if (this.listView1.SelectedItems[i].Selected)     //如果第i行被选中的话,取得该选中行的索引号
                                    {                                    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\\毕业设计\\ASSM.accdb";//SQL Server链接字符串
                                        OleDbConnection connection = new OleDbConnection(connectionString); //Sql链接类的实例化
                                        connection.Open();//打开数据库
                                        string strSQL = "SELECT * FROM ASSM "; //要执行的SQL语句 
                                        OleDbDataAdapter da = new OleDbDataAdapter(strSQL, connectionString); //创建DataAdapter数据适配器实例
                                        DataSet ds = new DataSet();//创建DataSet实例
                                        da.Fill(ds, "ASSM");//使用DataAdapter的Fill方法(填充),调用SELECT命令                                    //id = dt.Rows[this.listView1.SelectedIndices[i]][0].ToString();   //获取选中的第i条记录在数据库中的id号。
                                        id = ds.Tables["ASSM"].Rows[this.listView1.SelectedIndices[i]][0].ToString();   //获取选中的第i条记录在数据库中的id号。
                                        string sql = string.Format("delete from ASSM where id='{0}'", id); //删除语句。                                   
                                        OleDbCommand cmd = new OleDbCommand(sql, connection);
                                        cmd.ExecuteNonQuery(); //执行删除。
                                        cmd.Dispose();
                                        
                                                                      }
                                }
                            }                        listView1.Refresh(); //删除结束后刷新listView。
                        }
    我按照你的方法填充了数据库了,执行断点后查看到sql这个变量还是为null
      

  18.   

    是读取excel?那你sql有问题string strSQL = "SELECT * FROM ASSM ";
    改为
    string strSQL = "SELECT * FROM [ASSM$] ";
    试一试
      

  19.   


    是读取access数据库哈 ,我用了[ASSM$]和[ASSM]都不行
      

  20.   

    哦!我没看后面.我还以为是excel,那你直接把sql在数据执行下试一试有没有结果
      

  21.   

    你查 ds里的table是不是null
      

  22.   

    我用 DataTable dt = ds.Tables["ASSM"];,又查询断点执行程序后发现dt值为空,就是说数据库table信息是空的,但不知道该怎么修改
      

  23.   

    你da.Fill(ds) 的话DataTable dt= ds.Tables[0];
    da.Fill(ds,"ASSM")的话 可以 DataTable dt = ds.Tables["ASSM"];
      

  24.   

    你直接看那条sql在数据库能查出数据不!查不出datatable肯定为null
      

  25.   

    唉,虽然问题没有解决,但还是打算结贴了,感谢楼上所有关注过这个问题的朋友,感谢你们!自己已经找到其他的方法来做这个项目了,用的datagridview,效果比listview好。如果有需要一起探讨的朋友,欢迎加扣扣:843626011,只求共同进步。