如题,直接上代码:
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未将对象引用设置到对象的实例
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未将对象引用设置到对象的实例
解决方案 »
- BatchInsert
- C#里除了 Datagirdview可以接收数据源 还有什么吗?
- foreach的语法bug?
- 我想问个问题
- C#程序和Sqlserver的安装部署
- 看了Duwamish 7.0 CS的例子有写许疑惑?请高手帮帮忙解惑?
- 大型文件的切分方法
- 下面的代码怎样老是提示,"已有打开的与此命令相关联的 DataReader,必须首先将它关闭。"那里出错了呢?
- 从今天开始,水晶报表将受到来自纺织服装界的强力挑战!我水晶报表很难实现工艺单这一类格式的打印!其格式内详,有兴趣的进来看看,发表
- 如何用c#在Exchange上创建Email?(100分)
- 简单参数问题
- windows 服务重新安装 Error 1001 指定的服务已存在
就是这行提示的“未将对象引用设置到对象的实例”。
我开始想是不是自己数据库调用的时候内容是空的,但我运行程序时listview控件里是显示了数据库的信息的啊,这点我就糊涂不解了。
selectItem?怎么试呢?上面if语句里有selectItems(if (this.listView1.SelectedItems[i].Selected) )
如果为null,那该怎么改呢?我刚接触C#,很多不懂,还请大哥赐教。
this.listView1.SelectedIndices[i]][0].ToString()这个的值是多少,单步调试看下就知道是那个出问题了
DataTable dt=ds.Tables["ASSM"];看下这个dt.Rows.Count是否有值,
然后看下this.listView1.SelectedIndices[i]][0].ToString()这个的值是多少
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);
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand.Connection = connection;
da.SelectCommand.CommandText = sql查询语句;
da.Fill(ds);
这个数据集中的数据表是否为空,
listview中是否有选中的行
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
改为
string strSQL = "SELECT * FROM [ASSM$] ";
试一试
是读取access数据库哈 ,我用了[ASSM$]和[ASSM]都不行
da.Fill(ds,"ASSM")的话 可以 DataTable dt = ds.Tables["ASSM"];