请教高手:ASP.NET下异地SQL导入导出问题

ncjmc 2008-06-11 10:00:49
环境:ASP.NET 2.0,MS SQL 2000。WEB服务器和SQL服务器分别在两台服务器上。

操作:SQL与Access、Excel、Dbase、Paradox的异地导入和导出

问题:用下列语句将WEB服务器上的D:\WEB\中的Access、Excel、Dbase、Paradox数据文件导入到SQL服务器上的XXXX数据库的TEST表中。当OleDb连接源文件是Excel或Access文件时,语句操作成功,但若为DBF或DB文件时,出现SQL语句的INTO错误的提示。

// DBF文件连接串
string ConnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\WEB\\;Extended Properties=dBASE IV;Persist Security Info=False;";
// Excel连接串
//string ConnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\WEB\\TEST.xls;Extended Properties=Excel 8.0;";
OleDbConnection objConn = null;
OleDbCommand objCmd = null;
try
{
objConn = new OleDbConnection(ConnString);
objCmd = new OleDbCommand(null, objConn);
objCmd.CommandText = "INSERT INTO [ODBC;Data Source=192.168.1.2;Initial Catalog=XXXX;User ID=sa;Password=XXXXXXX;].[TEST] (姓名,性别) SELECT 姓名,性别 FROM [A2008]",
objConn.Open();
objCmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Response.Write("错误:" + ex.Message);
}
finally
{
objConn.Close();
objCmd.Dispose();
objConn.Dispose();
}

另外,SQL导出语句,DBF、DB文件必须用
SELECT 姓名,性别 INTO [A2008] FROM [TEST] IN [ODBC][ODBC;Data Source=192.168.1.2;Initial Catalog=XXXX;User ID=sa;Password=XXXXXXX;]
不能用
SELECT 姓名,性别 INTO [A2008] FROM [ODBC;Data Source=192.168.1.2;Initial Catalog=XXXX;User ID=sa;Password=XXXXXXX;].[TEST]
Access、Excel两者都可以。

此问题困扰很久,期待哪位高手解决。
...全文
229 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwwb 2008-06-13
  • 打赏
  • 举报
回复
再次测试,JET SQL确实不支持对服务型数据的UPDATE、DELET
wwwwb 2008-06-13
  • 打赏
  • 举报
回复
呵呵,没有可能性,jet sql只支持桌面数据地UPDATE、DELETE,服务型不支持
UPDATE、DELETE只支持
[DBASE 5.0;DATABASE=\\192.167.0.6\temp].QQ1
这种格式,很
ncjmc 2008-06-12
  • 打赏
  • 举报
回复
放在一台服务器上的语句早就实现了,不存在问题,这里我只想探讨一下这方面的可能性,实在不行的话,就把两台服务器合并在一起
WWWWA 2008-06-12
  • 打赏
  • 举报
回复
delete 也是不行的
WWWWA 2008-06-12
  • 打赏
  • 举报
回复
JET SQL不能用
TT IN
ODBC[ODBC;Driver=SQL Server;UID=sa;PWD=123;Server=YOUR;DataBase=TMP];
这种方式替换,既然在SQL SERVER中,用OPENROWSET、OPENDATASOURCE
替换,不过,要求EXCEL、DBF、DB等等在服务器中。
ncjmc 2008-06-12
  • 打赏
  • 举报
回复
请看清楚第3个问题的条件先!
ncjmc 2008-06-12
  • 打赏
  • 举报
回复
select 命令是没有问题的,问题是update命令
WWWWA 2008-06-12
  • 打赏
  • 举报
回复
SQL SERVER?
SELECT * FROM TT IN
ODBC[ODBC;Driver=SQL Server;UID=sa;PWD=123;Server=YOUR;DataBase=TMP];
ncjmc 2008-06-12
  • 打赏
  • 举报
回复
A008是SQL中的数据表
WWWWA 2008-06-12
  • 打赏
  • 举报
回复
A2008是什么数据库的表?
ncjmc 2008-06-12
  • 打赏
  • 举报
回复
就是这行语句也报错:
update [A2008] in [ODBC][ODBC;Data Source=192.168.1.2;Initial Catalog=XXXX;User ID=sa;Password=XXXXXXX;] set 姓名='Test'
ncjmc 2008-06-12
  • 打赏
  • 举报
回复
外部数据表已经通过OleDb连接了,还是报错啊
WWWWA 2008-06-12
  • 打赏
  • 举报
回复
[外部数据表名] 是什么类型?也可以用
[A2008] A in [ODBC][ODBC;Data Source=192.168.1.2;Initial Catalog=XXXX;User ID=sa;Password=XXXXXXX;]
这种方式
ncjmc 2008-06-12
  • 打赏
  • 举报
回复
1. 将WEB服务器上的外部数据插入到异地SQL的方法,已用一行语句解决。

2. 在我的程序中还用到将WEB服务器上的Access/Excel/DBF/Paradox(DB)文件与异地SQL比较,再在WEB服务器上返回一个结果文件的情况,也用一行语句解决。

3. 还有一个问题没有解决:那就是将WEB服务器上的数据更新异地SQL上的数据,好象OleDb的Update不支持From,用下列UPDATE语句,又出现“操作必须使用一个可更新的查询”的错误(应该不会是权限问题,同样数据表,用Insert Into语句成功,在服务器上权限全部放开都不行):

// OleDb连接串指向WEB服务器上的DBF等外部数据表
update [A2008] A in [ODBC][ODBC;Data Source=192.168.1.2;Initial Catalog=XXXX;User ID=sa;Password=XXXXXXX;]
inner join [外部数据表名] B
on A.ID=B.ID
set A.姓名=B.姓名,A.性别=B.性别


第3个问题如解决了,或者过了10天没解决,就结贴,并公布前两项的结果,顶者有分!
ncjmc 2008-06-12
  • 打赏
  • 举报
回复
1. 将WEB服务器上的外部数据插入到异地SQL的方法,已用一行语句解决。

2. 在我的程序中还用到将WEB服务器上的Access/Excel/DBF/Paradox(DB)文件与异地SQL比较,再在WEB服务器上返回一个结果文件的情况,也用一行语句解决。

3. 还有一个问题没有解决:那就是将WEB服务器上的数据更新异地SQL上的数据,好象OleDb的Update不支持From,用下列UPDATE语句,又出现“操作必须使用一个可更新的查询”的错误(应该不会是权限问题,同样数据表,用Insert Into语句成功,在服务器上权限全部放开都不行):

// OleDb连接串指向WEB服务器上的DBF等外部数据表
update [A2008] A in [ODBC][ODBC;Data Source=192.168.1.2;Initial Catalog=XXXX;User ID=sa;Password=XXXXXXX;]
inner join [外部数据表名] B
on A.ID=B.ID
set A.姓名=B.姓名,A.性别=B.性别


第3个问题如解决了,或者过了10天没解决,就结贴,并公布前两项的结果,顶者有分!
ncjmc 2008-06-12
  • 打赏
  • 举报
回复
1. 将WEB服务器上的外部数据插入到异地SQL的方法,已用一行语句解决。

2. 在我的程序中还用到将WEB服务器上的Access/Excel/DBF/Paradox(DB)文件与异地SQL比较,再在WEB服务器上返回一个结果文件的情况,也用一行语句解决。

3. 还有一个问题没有解决:那就是将WEB服务器上的数据更新异地SQL上的数据,好象OleDb的Update不支持From,用下列UPDATE语句,又出现“操作必须使用一个可更新的查询”的错误(应该不会是权限问题,同样数据表,用Insert Into语句成功,在服务器上权限全部放开都不行):

// OleDb连接串指向WEB服务器上的DBF等外部数据表
update [A2008] A in [ODBC][ODBC;Data Source=192.168.1.2;Initial Catalog=XXXX;User ID=sa;Password=XXXXXXX;]
inner join [外部数据表名] B
on A.ID=B.ID
set A.姓名=B.姓名,A.性别=B.性别


第3个问题如解决了,或者过了10天没解决,就结贴,并公布前两项的结果,顶者有分!
wwwwb 2008-06-11
  • 打赏
  • 举报
回复
上述TEMP是共享的文件夹。
INSERT INTO [DBASE 5.0;DATABASE=\\192.167.0.6\temp].QQ1(金额,日期) SELECT 金额,日期 FROM QQ1
wwwwb 2008-06-11
  • 打赏
  • 举报
回复
呵呵,MS已经规定DBF不能用点+表名的形式,只能用其它方式了(如DSN),
INSERT INTO [DBASE 5.0;DATABASE=\\192.167.0.6\TEMP].QQ1 SELECT * FROM QQ1

注意:用JET引擎不能打开最新版本的DBF文件(除非你升级),文件夹要共享,有相应的权限
ncjmc 2008-06-11
  • 打赏
  • 举报
回复
谢谢wwwwb
但我这个文件是用户上传的,用DSN很麻烦。

像SELECT * from [odbc;dsn=Visual FoxPro Tables].qq1这行语句
已经用SELECT * FROM [表名] in [ODBC连接串]的方式实现了

像这行语句:

INSERT INTO [ODBC;Data Source=192.168.1.2;Initial Catalog=XXXX;User ID=sa;Password=XXXXXXX;].[TEST] (姓名,性别) SELECT 姓名,性别 FROM [A2008]

用IN好象也不能实现。有没有别的办法吗?
wwwwb 2008-06-11
  • 打赏
  • 举报
回复
你用的是JET引擎,确实DBF不能用点+表名的形式,不知道MS是怎么想的,
也可以在ODBC中建立dsn,用
SELECT * from [odbc;dsn=Visual FoxPro Tables].qq1
来达到你的目的
加载更多回复(2)

2,598

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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