OleDbDataAdapter.update进行更新数据库的问题??求助!

lanlanq 2007-04-12 04:11:53
第一种方式,一个dataset和并另一个dataset,提示"无法找到TableMapping[Table]或DataTable"

private bool writeTowDataSetAccess(string tablename, string dataepath, OleDbConnection con01)
{
bool bl = false;
//定义第二个数据库连接
OleDbConnection conn = null;
//OleDbCommand comm = null;
OleDbDataAdapter oleda02 = null;
//定义第一个数据库连接
OleDbDataAdapter oleda01 = null;
DataSet ds = null;
DataSet ds02 = null;
try
{
//第一个数据库写入datagrid

oleda01 = new OleDbDataAdapter("select * from " + tablename, con01);
ds = new DataSet();
//dataGrid.DataSource = ds;
oleda01.Fill(ds);
//dataGrid.Refresh();

//另一个数据库连接

//创建第二个连接
if (conn != null) conn.Close();
conn = ModelUtility.getAccessConnection();
//创建第二个数据集
oleda02 = new OleDbDataAdapter();
oleda02.SelectCommand = new OleDbCommand("select * from " + tablename, conn);
OleDbCommandBuilder builder = new OleDbCommandBuilder(oleda02);
//打开连接
conn.Open();
//创建第二个dataset,填充dataset
ds02 = new DataSet();
oleda02.Fill(ds02);

//把第一个dataset和第二个合并
ds02.Merge(ds, true, MissingSchemaAction.Add);



//conn.Open();
//comm = new OleDbCommand("select * from " + tablename, conn);
//oleda02 = new OleDbDataAdapter("select * from " + tablename, conn);
//oleda02.SelectCommand = comm;
//OleDbCommandBuilder oledbcb = new OleDbCommandBuilder(oleda02);
////创建第二个dataset
//ds02 = new DataSet();//建立DataSet对象
//oleda02.Fill(ds02);

////把第一个dataset和第二个合并
//ds02.Merge(ds, true, MissingSchemaAction.Add);

//开始写入
label5.Text = "开始写入表:" + tablename;
oleda02.TableMappings.Add(tablename, tablename);
//更新操作
builder.RefreshSchema();
builder.GetUpdateCommand();
oleda02.Update(ds02, tablename);
ds02.AcceptChanges();
label5.Text = "表:[" + tablename + "]写入成功!";

bl = true;
}
catch (Exception ex)
{
bl = false;
MessageBox.Show(ex.Message.ToString());
}
finally
{
if (oleda01 != null)
oleda01.Dispose();
if (oleda02 != null)
oleda02.Dispose();
if (ds != null)
ds.Dispose();
conn.Dispose();
conn.Close();
}
return bl;
}
...全文
870 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoushii 2007-05-07
  • 打赏
  • 举报
回复
mark
htjuw 2007-05-07
  • 打赏
  • 举报
回复
首先感谢zhzuo(秋枫) 的提示

for (i = 0; i < ds1.Tables["t1"].Rows.Count; i++)
{

ds1.Tables["t2"].ImportRow(ds1.Tables["t1"].Rows[i]);
//ds1.Tables["t2"].Rows[i].SetAdded();
}

我之前这样更新数据,没有在导入后变更该行的RowState状态,结果出现了和搂住一样的问题,可参阅http://community.csdn.net/Expert/topic/5505/5505298.xml?temp=8.220851E-03
之后把上述代码中的注释去掉就可以如期望一样写回数据库了

gis_yifan 2007-05-02
  • 打赏
  • 举报
回复
只设置主键还不行,还要将主键这一列显示出来才行,就是返回值必须有主键这一列。
marvelstack 2007-05-01
  • 打赏
  • 举报
回复
出现问题的很大原因如下:
1.使用OleDbCommandBuilder生成的的更新代码是不是会有问题。
2.DataSet.Merge方式,它又多个重载方式。
3.确认是否对DataSet中的数据进行了修改,又就是说DataRowState发生了改变。

强烈建议楼主设置断点进行单部调试,应该会比较容易发现问题。

htjuw 2007-04-30
  • 打赏
  • 举报
回复
和我碰到一样的问题
lanlanq 2007-04-29
  • 打赏
  • 举报
回复
这么长时间,有没有会的,帮忙给解决以下
lanlanq 2007-04-18
  • 打赏
  • 举报
回复
这个问题有没有朋友解决的,请帮忙解决以下
yuanwhfly 2007-04-13
  • 打赏
  • 举报
回复
我的也是,merge之后,如果直接将合并结果用一个datagridview显示出来,明明看到合并到一块了,可是数据库死活就是更新不进去,而且也不出错.
lanlanq 2007-04-12
  • 打赏
  • 举报
回复
那我的怎么还是不行,不抱错,就是数据库不变,郁闷
chmodyou 2007-04-12
  • 打赏
  • 举报
回复
using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlDataAdapter adapter =
new SqlDataAdapter(
"SELECT CustomerID, CompanyName FROM dbo.Customers",
connection);

connection.Open();

DataSet customers = new DataSet();
adapter.FillSchema(customers, SchemaType.Source, "Customers");
adapter.Fill(customers, "Customers");

DataSet orders = new DataSet();
orders.ReadXml("Orders.xml", XmlReadMode.ReadSchema);
orders.AcceptChanges();

customers.Merge(orders, true, MissingSchemaAction.AddWithKey);

jiatong1981 2007-04-12
  • 打赏
  • 举报
回复
不了哦 我都这么做的怎么没问题呢

oleda02.Update(datainfoDataSet);


…………

datainfoDataSet.AcceptChanges();
lanlanq 2007-04-12
  • 打赏
  • 举报
回复
还是一样没有变化
jiatong1981 2007-04-12
  • 打赏
  • 举报
回复
直接调用ds.AcceptChanges();试一下
lanlanq 2007-04-12
  • 打赏
  • 举报
回复
都有主健
jiatong1981 2007-04-12
  • 打赏
  • 举报
回复
使用OleDbCommandBuilder 数据表必须有主键。

lanlanq 2007-04-12
  • 打赏
  • 举报
回复
请大家帮帮我,已经困惑好几天了
lanlanq 2007-04-12
  • 打赏
  • 举报
回复
这种方式行不通,我采用第二种方式,就是打开一个dataset直接更新到第二个数据库。
执行正常,可是数据库没有更新。然后我查看dataset里面有内容。可是数据库没有变化
private bool writeDataSetAccess(string tablename, string dataepath)
{
bool bl = false;
//定义第二个数据库连接
OleDbConnection conn = null;
OleDbDataAdapter oleda02 = null;
try
{

//先把原先数据库连接属性值放入全局属性中
this.connString = cwsoft.Properties.Settings.Default.cDatabaseConnectionString.ToString();
//更新数据库连接属性值
cwsoft.ModelUtility.eidtSettingDatabase(dataepath);

cwsoft.datainfoDataSetTableAdapters.TBL_BMTableAdapter tBL_BMTableAdapter = new cwsoft.datainfoDataSetTableAdapters.TBL_BMTableAdapter();

datainfoDataSet datainfoDataSet = new cwsoft.datainfoDataSet();
tBL_BMTableAdapter.Fill(datainfoDataSet.TBL_BM);

//创建第二个连接
if (conn != null) conn.Close();
conn = ModelUtility.getAccessConnectionAll(connString);
//创建第二个数据集
oleda02 = new OleDbDataAdapter();
oleda02.SelectCommand = new OleDbCommand("select * from " + tablename, conn);
OleDbCommandBuilder builder = new OleDbCommandBuilder(oleda02);
MessageBox.Show(datainfoDataSet.TBL_BM.Rows[0][3].ToString());
//打开连接
conn.Open();
//开始写入
label5.Text = "开始写入表:" + tablename;
//oleda02.TableMappings.Add(tablename, tablename);
//更新操作
builder.RefreshSchema();
builder.GetUpdateCommand();
oleda02.Update(datainfoDataSet,tablename);
datainfoDataSet.Tables[tablename].AcceptChanges();
label5.Text = "表:[" + tablename + "]写入成功!";

bl = true;
}
catch (Exception ex)
{
bl = false;
MessageBox.Show(ex.Message.ToString());
}
finally
{
if (oleda02 != null)
oleda02.Dispose();
conn.Dispose();
conn.Close();
cwsoft.ModelUtility.eidtSettingDatabase(this.connString);
}
return bl;

}

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧