我在做一个winform项目,要求两个版本,一个access数据库版本,一个sql数据库版本。在sql中的treeview添加和删除节点都没问题。但是同样的代码在access数据库中,我首次添加n个节点,这些新增的节点是可以删除的,当我删除新增节点之后,再次增加新节点,然后执行删除,则会报错。断点之后发现dtrow.Delete()之后,try{updata(dataset);···处不能updata。删除节点代码如下:···
foreach (DataRow dtrow in yiqiDataSet.Tables["db_zubie"].Rows)
{······
dtrow.Delete();
···
}
try
{
db_zubieTableAdapter.Update(yiqiDataSet);
··初始化TreeView节点··
this.yiqiDataSet.AcceptChanges();
}
catch
{···}
finlly
{···}
//新增节点的代码如下:DataRow insertRow = yiqiDataSet.Tables["db_zubie"].NewRow();
{
··
int bb = 0;
foreach (DataRow datarow1 in yiqiDataSet.Tables["db_zubie"].Rows)//取zongheid中最大的数
{
int aa = Convert.ToInt32(datarow1.ItemArray[0]);
if (aa > bb)
{
bb = aa;
}
}int nodecount = bb + 1;
insertRow["id"] = nodecount;
insertRow["parent1id"] = treeView1.SelectedNode.Name;//父节点}try
{
yiqiDataSet.Tables["db_zubie"].Rows.Add(insertRow);
··初始化TreeView节点··
this.yiqiDataSet.AcceptChanges();
}
····代码太长 因为判断的条件太多,我就把主要的给粘贴出来了。请大家帮帮忙吧,困扰很久了。论坛和百度查了很久,也问了很久,没结果···最后的希望了··
foreach (DataRow dtrow in yiqiDataSet.Tables["db_zubie"].Rows)
{······
dtrow.Delete();
···
}
try
{
db_zubieTableAdapter.Update(yiqiDataSet);
··初始化TreeView节点··
this.yiqiDataSet.AcceptChanges();
}
catch
{···}
finlly
{···}
//新增节点的代码如下:DataRow insertRow = yiqiDataSet.Tables["db_zubie"].NewRow();
{
··
int bb = 0;
foreach (DataRow datarow1 in yiqiDataSet.Tables["db_zubie"].Rows)//取zongheid中最大的数
{
int aa = Convert.ToInt32(datarow1.ItemArray[0]);
if (aa > bb)
{
bb = aa;
}
}int nodecount = bb + 1;
insertRow["id"] = nodecount;
insertRow["parent1id"] = treeView1.SelectedNode.Name;//父节点}try
{
yiqiDataSet.Tables["db_zubie"].Rows.Add(insertRow);
··初始化TreeView节点··
this.yiqiDataSet.AcceptChanges();
}
····代码太长 因为判断的条件太多,我就把主要的给粘贴出来了。请大家帮帮忙吧,困扰很久了。论坛和百度查了很久,也问了很久,没结果···最后的希望了··
此消息通过 【CSDN论坛 Winform测试版】 回复!
是自动生成的, 我没写updata 和 delect的语句,用了VS自带的updata更新。
{
Response.write(ex.tostring());
}看看页面输出的是什么?
ACCESS的UPDATE要求SQL语句及数据集DATA中必须包含键列信息,如果你的SQL和数据集中的列不包括主键或索引,则无法用UPDATE进行插入、删除、更新
违反并发性:DwleteCommand 影响了预期1条记录中的0条
我没对updata 和delect insert 写任何操作语句,是winform项目,使用的是默认的updata(dataset),dtrow.delect(),等形式更新的dataset。
你的列数据是不是有规则,如不能为空。
如果有规则,你能用Insert插入新记录,但不能用UPDATE
你的树叉、节点是否绑定数据
没有绑定你又是以怎样的方法更新数据库
”错误。
在sql中 这些语句没问题,数据库用access的时候才会出错,你看看我给的问题,请读完问题,谢谢大家帮忙,我苦恼了很久啊,看百度说access是顺序的,但是我没写OleDbcommad语句,也不知道是不是这的问题,但是就是不知道问什么出现这样的问题。你们是我最后的希望了啊···
OleDb::OleDbCommandBuilder^ odcb = gcnew OleDbCommandBuilder(dbo.oleda); dbo.oleda->Update(this->dSetTj->Tables["dTabstat"]);
这是C++的语法
OleDb::OleDbCommandBuilder^ odcb = gcnew OleDbCommandBuilder(dbo.oleda);
string str = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + Environment.CurrentDirectory + "\\yiqi.dat;Persist Security Info=True;Jet OLEDB:Database Password=haozi110;User ID=Admin";
OleDbConnection conn = new OleDbConnection(str);
conn.Open();
OleDbDataAdapter sqlda = new OleDbDataAdapter("select * from db_zubie", conn);
//DataSet ds = new DataSet();//ds已经设置为全局变量
sqlda.Fill(ds);
conn.Close();
AddTree(0, null, treeView1, ds.Tables[0]);
//建立树形结构代码public void AddTree(int ParentID, TreeNode pNode, TreeView treeView, DataTable dt)
{ DataView dvTree = new DataView(dt);
//过滤ParentID,得到当前的所有子节点
//dvTree.RowFilter = "[PARENTID] = " + ParentID;
dvTree.RowFilter = "[parent1id]=" + ParentID;
foreach (DataRowView Row in dvTree)
{ TreeNode Node = new TreeNode(); if (pNode == null)
{ //添加根节点
Node.Name = Row["id"].ToString();
Node.Text = Row["zubie"].ToString();
treeView.Nodes.Add(Node);
//Node.Expanded = true;
AddTree(Int32.Parse(Row["id"].ToString()), Node, treeView, dt); //再次递归
}
else
{ //̀添加当前节点的子节点
Node.Name = Row["id"].ToString();
Node.Text = Row["zubie"].ToString();
pNode.Nodes.Add(Node);
//Node.Expanded = true;
AddTree(Int32.Parse(Row["id"].ToString()), Node, treeView, dt); //再次递归
}
}
}
少这一句吧
你仔细看下与你的有什么不同
OleDb::OleDbCommandBuilder^ odcb = gcnew OleDbCommandBuilder(dbo.oleda);
少这一句吧
这是托管C++的语法
这句我没写过啊,OleDbCommand语句 我没写,我用的是winform中遍历查找到dtrow:DataRow dtrow in yiqiDataSet.Tables["db_zubie"].Rows;然后dtrow.delect();增加的时候也是用的yiqiDataSet.Tables["db_zubie"].Rows.Add(insertRow);
//insertRow是用语句DataRow insertRow = yiqiDataSet.Tables["db_zubie"].NewRow();创建的
恩,上了上面的那句,就会出现第二次添加再删除 报错“违反并发性:DwleteCommand 影响了预期1条记录中的0条”么?我去更改一下,然后再来讨教,谢谢你们啊!!