访问有用户名和密码的网络共享,实现数据导入

一个应用需要使用局域网某部主机提供的数据.由于安全考虑.这个主机只开放了一个共享地址,并给了有权访问的用户名和密码.数据为ACCESS文件.

而我们的应用需要每天定时去访问这个文件.来同步数据.

环境:

1.共享文件形式,提供访问的用户名和密码;

2.文件格式为Access文件;

3.数据需要定时访问,与更新;

4.数据最终存储目标地址为SQLServer数据库

 

最初:

我们想通过SqlServer DTS包定时执行来导入数据.但不管怎么调试.SQLServer在执行的时报错.报错提示为权限不足.经过分析,SqlServer DTS

导入对于网络共享目录的支持不太好,再深入发现也跟共享目录给的权限有一定关系.这个问题困绕了我们很长时间。在网络上找了很多资料都没解决。

 

改变方案:

写一个单独导入的程序,在导入之前通过批处理脚本去将文件复制到本地,然后再去导入,然后定出以下几个步骤

1.启用批处理脚本程度

2.复制文件到本地目录

3.调用专门导数据的Exe可执行程序

4.导入成功

 

经过几步就可实现一次数据导入。可以走通。

接着将这个两个文件部署到服务器中.用windows计划任务来定时执行这个批处理.

部署后倍感开心。总算能实现完整导入。

第二天来公司。打开服务器一看windows计划任务成功执行。然后查询数据库数据。竟然没有导入。空空如也。

是什么问题?然后再手工执行了计划任务,发现一闪而过。也没有错误提示.数据库没有数据.说明导入数据程序没有执行到。

再打开计划任务高级设置。发现一个地方 “起始于” 参数设置然后输入bat的目录地址,再次运行计划任务。成功!

(这里注意:在bat调用其它Exe的时候一定要指定批处理文件的起启位置。否则调不到Exe)

 

到这里这个导入程序可以实现自动更新了。然而好景不长。由于网络主从切换,程序运行服务器要重新启动。发现重新启动后网络共享地址就没权访问。

需要再次输入用户名和密码,如果网络环境略发生变化就会失败.就不太稳定了.

 

升级方案

1.启用批处理脚本程度

2.创建一个网络驱动器

3.复制网络驱动器文件到本地目录

4.调用专门导数据的Exe可执行程序

5.删除网络驱动器

6.导入成功

升级方案后加入网络驱动器会指定访问的密码和用户名.不管机器是否为第一次访问都可以连接.(你懂的)

 

在创建网络驱动器时注意:

/user:机器名/用户名

机器名为远程共享文件的机器名.用户名为远程共享文件的机器用户名

例如:net use M: \\192.168.1.2\TEST "123456" /user:fileserver\administrator

\\192.168.1.2\TEST为共享目录的地址

123456为密码

fileserver 为共享服务器名称

administrator 为共享服务器登陆用户名

 

脚本如下:

@ECHO OFF
@REM 以下三个变量配置,注意CHT_PATH等号后不能有空格

net use M: \\192.168.1.150\TEST1 "123456" /user:fileserver\administrator
net use N: \\192.168.1.150\TEST2 "123456" /user:fileserver\administrator

@SET CHT_PATH="M:\FUELSCAN.MDB"
@SET HIT_PATH="N:\FUELSCAN.MDB"
@SET SQL_CONN="Server=192.168.1.2;initial catalog=TEST_DB;uid=sa;pwd=sa123;"

@TITLE 作业导数
@ECHO 导入目标机器 %SQL_CONN%
@ECHO CHT文件来源 %CHT_PATH%
@ECHO HIT文件来源 %HIT_PATH%
@ECHO 当前时间:
@DATE /T
@TIME /T

@ECHO 开始复制文件...%CHT_PATH%
@COPY %CHT_PATH% "CHT_HIT\CHT_TEMP.mdb"
@ECHO 开始复制文件...%HIT_PATH%
@COPY %HIT_PATH% "CHT_HIT\HIT_TEMP.mdb"

@ECHO 开始导入数据...
@ECHO 正在导入中...
@CALL SnphkHIT_CHT_Task.exe %SQL_CONN%

net use M: /del
net use N: /del

@ECHO 导入完成

posted @ 2011-06-21 16:04  徐小朝  阅读(1419)  评论(0编辑  收藏  举报