如何上传数据到服务器的sql server数据库中?

sunnf 2006-09-08 03:18:19
下面的子公司有应用程序,数据库为access。
有总部有一个sql server数据库.
access中的一个表(总共有20多个表,而且无关的数据比较多)中的数据上传到sql server数据库中,这个表有图片字段(ole类型),保存图片数据。
采用定时上传的方式(如有新的数据录入或更新后),如在半夜时。

如果没有图片,我可以生成sql语句方式的文件,上传到服务器,然后执行。但是表中有图片我不知如何实现,性能可靠的方案。
...全文
447 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xc52201530 2006-09-08
  • 打赏
  • 举报
回复
关注
sunnf 2006-09-08
  • 打赏
  • 举报
回复
非常好用。在最后一步只选择保存vb脚本。
把里面的密码修改为你自己的。运行ok.非常简单好用。
sunnf 2006-09-08
  • 打赏
  • 举报
回复
我找到一个方法在最后选项做为vb包,正研究中。
benyfeifei 2006-09-08
  • 打赏
  • 举报
回复
当前可以,具体你还是看看SQL的帮助文件。这段代码不是我自己写的,呵呵。
sunnf 2006-09-08
  • 打赏
  • 举报
回复
to benyfeifei(狒狒)
能从access数据库的一个表导入到sql数据库中吗
benyfeifei 2006-09-08
  • 打赏
  • 举报
回复
DTS的简单应用,SQL本身自带了很大DTS的例子,有空多看看。
Private strServerName As String 'Server Name
Private strDBName As String 'Database Name
Private strDBUser As String 'Database User Name
Private strDBUserPsd As String 'Database User Password
这些变量假设在次之前都已经正确的附值了,在下面的代码中就直接用了

下面开始动手:

引用:Microsoft DTSPackage Object Library

下面是完成数据导入的主function。
进参:文本文件的路径及文件名
返回:成功,True
失败,False 及 错误号

Private Function Import_DTS(strPath As String) As Boolean
Dim oConnection As DTS.Connection
Dim oStep As DTS.Step
Dim oTask As DTS.Task
Dim oPackage As DTS.Package2
Dim oCustomTask As DTS.BulkInsertTask
On Error GoTo PackageError

Import_DTS = True

'建立数据包
Set oPackage = New DTS.Package
oPackage.FailOnError = True
Set oConnection = oPackage.Connections.New("SQLOLEDB")
Set oStep = oPackage.Steps.New
Set oTask = oPackage.Tasks.New("DTSBulkInsertTask")
Set oCustomTask = oTask.CustomTask

'与数据库进行连接,为了清楚起见,这里我单独写了一个过程,即 SetConnections
'具体可以参考Private Sub SetConnections
SetConnections oPackage, oConnection

With oStep
.Name = "GenericPkgStep"
.ExecuteInMainThread = True
End With

'Customize the Task Object
With oCustomTask
.Name = "GenericPkgTask"
'文本文件的路径
.DataFile = strPath
.ConnectionID = 1
'注意目标表的写法
.DestinationTableName = strDBName & "..DriverName"
'以tab分隔列
.FieldTerminator = VBA.Chr(9)
'以换行回车分隔行
.RowTerminator = vbCrLf
End With

oStep.TaskName = oCustomTask.Name

'添加包
With oPackage
.Steps.Add oStep
.Tasks.Add oTask
.FailOnError = True
End With

'运行包
oPackage.Execute

'释放
Set oConnection = Nothing
Set oCustomTask = Nothing
Set oTask = Nothing
Set oStep = Nothing
oPackage.UnInitialize
Set oPackage = Nothing
Exit Function
'以下是出错处理
PackageError:
Dim strMsg As String
strMsg = "Package failed error: " & ErrorNumConv(Err.Number) & _
vbCrLf & Err.Description & vbCrLf & AccumStepErrors(oPackage)
MsgBox strMsg, vbExclamation, oPackage.Name
Set oConnection = Nothing
Set oCustomTask = Nothing
Set oTask = Nothing
Set oStep = Nothing
oPackage.UnInitialize
Set oPackage = Nothing
Import_DTS = False
End Function

'以下是数据包与数据库的连接部分:
Private Sub SetConnections(oPackage As DTS.Package, oConnection As DTS.Connection)

With oConnection
.ConnectionProperties("Persist Security Info") = True
.ConnectionProperties("User ID") = strDBUser
.ConnectionProperties("Initial Catalog") = strDBName
.ConnectionProperties("Data Source") = strServerName
.Catalog = strDBName
.DataSource = sServerName
.UserID = strDBUser
.Password = strDBUserPsd
.ID = 1
.Reusable = True
.ConnectImmediate = False
.UseTrustedConnection = False
End With
oPackage.Connections.Add oConnection

Set oConnection = Nothing
End Sub

'以下是出错处理
Private Function ErrorNumConv(ByVal lngErrNum As Long) As String

If lngErrNum < 65536 And lngErrNum > -65536 Then
ErrorNumConv = "x" & Hex(lngErrNum) & ", " & CStr(lngErrNum)
Else
ErrorNumConv = "x" & Hex(lngErrNum) & ", x" & _
Hex(lngErrNum And -65536) & " + " & CStr(lngErrNum And 65535)
End If

End Function

Private Function AccumStepErrors(ByRef oPackage As DTS.Package) As String
Dim oStep As DTS.Step
Dim strMessage As String
Dim lngErrNum As Long
Dim strDescr As String
Dim strSource As String

'查找出错地
For Each oStep In oPackage.Steps
If oStep.ExecutionStatus = DTSStepExecStat_Completed Then
If oStep.ExecutionResult = DTSStepExecResult_Failure Then
'得到出错信息
oStep.GetExecutionErrorInfo lngErrNum, strSource, strDescr
strMessage = strMessage & vbCrLf & _
"Step " & oStep.Name & " failed, error: " & _
ErrorNumConv(lngErrNum) & vbCrLf & strDescr & vbCrLf
End If
End If
Next
AccumStepErrors = strMessage

End Function
sunnf 2006-09-08
  • 打赏
  • 举报
回复
to zq972(热)→(大·汗·天·子) :
我正在找dts的方案,请问如何实现?
不是图片的没有关系,我试一下图片。
zq972 2006-09-08
  • 打赏
  • 举报
回复
这种情况我一般都是用dts来做,呵呵,不过没试过图片
province_ 2006-09-08
  • 打赏
  • 举报
回复
有图片的话只有用记录集对象来APPENDCHUNK了。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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