• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

OleDbDataAdapter.update的问题

zhuyaowei 2008-11-04 05:19:07
我现在在作一个access和sqlserver互相导入的程序,两个数据库表结构完全一样。

在从access向sqlserver导时能成功导入,可是 从sqlserver往access导入时,发生错误

{"INSERT INTO 语句的语法错误。"}

不知道怎么纠错,请各位大虾指点。

代码如下:

OleDbDataAdapter dpSqlServer = new OleDbDataAdapter("select * from tablename", SqlServerConn);
DataSet dsSqlServer = new DataSet();
dpSqlServer.Fill(dsSqlServer );

DataSet dsAccess= new DataSet();
OleDbDataAdapter dpAccess = new OleDbDataAdapter("select * from tablename where 1=0", AccessConn);
dpAccess .Fill(dsAccess);

dsAccess= dsSqlServer ;


for (int j = 0; j < dsSqlServer.Tables[0].Rows.Count; j++)
{
dsAccess.Tables[0].Rows[j].SetAdded();

}
try
{
OleDbCommandBuilder cbAccess = new OleDbCommandBuilder(dpAccess);

//导入数据
dpAccess .Update(dsAccess);

}
catch{}
...全文
53 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhuyaowei 2008-11-06

谢谢楼上。

我只是把主要部分列出来了

后来查到原因了,我的字段和关键字冲突。改了名后就可以了
回复
qinhl99 2008-11-04
[Quote=引用 6 楼 qinhl99 的回复:]
foreach (DataRow row in dt.Rows)
{
if (row.RowState != DataRowState.Added)
{
row.SetAdded();
}
}
[/Quote]

//将 DataRow 的 Rowstate 更改为 Added。如果当前行未处于 Unchanged 或 Added 状态,则将引发 InvalidOperationException 并显示一条消息,指示只能对 RowState 为 Unchanged 的 DataRow 实例调用 SetAdded。
还有你的catch{}这样写不太规范,出了错,你都不知道!
回复
qinhl99 2008-11-04
//导入数据

dpAccess.Update(dsAccess);
dpAccess.AcceptChanges();
回复
qinhl99 2008-11-04
foreach (DataRow row in dt.Rows)
{
if (row.RowState != DataRowState.Added)
{
row.SetAdded();
}
}
回复
qinhl99 2008-11-04
[Quote=引用 4 楼 zhuyaowei 的回复:]
谢楼上,我还是很想弄明白insert 错误出在哪里,如何调试。
[/Quote]
//不知道你这是不是全部的代码
回复
zhuyaowei 2008-11-04
谢楼上,我还是很想弄明白insert 错误出在哪里,如何调试。
回复
qinhl99 2008-11-04
1. 在SQL SERVER里查询access数据:
-- ======================================================
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\DB.mdb";User ID=Admin;Password=')...表名
-------------------------------------------------------------------------------------------------

2. 将access导入SQL server
-- ======================================================
在SQL SERVER 里运行:
SELECT *
INTO newtable
FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\DB.mdb";User ID=Admin;Password=' )...表名
-------------------------------------------------------------------------------------------------

3. 将SQL SERVER表里的数据插入到Access表中
-- ======================================================
在SQL SERVER 里运行:
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source=" c:\DB.mdb";User ID=Admin;Password=')...表名
(列名1,列名2)
select 列名1,列名2 from sql表

实例:
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\db.mdb';'admin';'', Test)
select id,name from Test


INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '', 表名)
SELECT *
FROM sqltablename
回复
qinhl99 2008-11-04
sf
回复
feiyun0112 2008-11-04
dpAccess .insertcommand.commandtext=?

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)
http://feiyun0112.cnblogs.com/
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2008-11-04 05:19
社区公告

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