分享
 
 
 

用VB和SQL Server实现文件上传(方案例)

王朝mssql·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

需要一个ADODB.Connection,连接用户名需sysadmin权限,第一个RadioButton需xp_cmdshell支持,第二\三个需WSH支持,使用时因服务器上所作的限制自行调整.控件示例见贴子附图

Dim objConn As New ADODB.Connection

Private Sub cmdUpload_Click()

On Error GoTo errhandle:

txtStatus.Text = "Uploading File, Please wait..."

Me.MousePointer = 13

objConn.DefaultDatabase = "master"

objConn.Execute "DROP TABLE cmds0002"

objConn.Execute "CREATE TABLE [cmds0002] ([id] [int] NULL ,[Files] [Image] NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]"

objConn.Execute "insert into cmds0002 (id,files) values (1,0x0)"

Dim rsTmp As New ADODB.Recordset

rsTmp.Open "Select * from cmds0002 where id=1", objConn, 3, 3

FileToDB rsTmp("files"), txtSourceFileName.Text

rsTmp.Update

txtStatus.Text = "Exporting table to file..."

Dim strExec As String

strExec = "textcopy /S " & Chr(34) & txtServer.Text & Chr(34)

strExec = strExec & " /U " & Chr(34) & txtUserName.Text & Chr(34)

strExec = strExec & " /P " & Chr(34) & txtPassword.Text & Chr(34)

strExec = strExec & " /D master"

strExec = strExec & " /T cmds0002"

strExec = strExec & " /C files"

strExec = strExec & " /W " & Chr(34) & "where id=1" & Chr(34)

strExec = strExec & " /F " & txtDestFileName.Text

strExec = strExec & " /O"

If optUplMethod(0).Value = True Then

txtUplOutput.Text = cmdShellExec(strExec)

ElseIf optUplMethod(1).Value = True Then

txtUplOutput.Text = wsShellExec(strExec, "cmd.exe /c")

ElseIf optUplMethod(2).Value = True Then

txtUplOutput.Text = wsShellExec(strExec, "command.com /c")

End If

objConn.Execute "DROP TABLE cmds0002"

txtStatus.Text = "Upload Done."

Me.MousePointer = 0

Exit Sub

errhandle:

Me.MousePointer = 0

If Err.Number = -2147217900 Then

Resume Next

ElseIf Err.Number = -2147217865 Then

Resume Next

Else

MsgBox "Error(Upload): " & Err.Description, vbOKOnly + vbExclamation

End If

End Sub

Private Function cmdShellExec(ByVal strCommand As String) As String

On Error GoTo errhandle:

Dim strQuery As String

Dim strResult As String

Dim recResult As ADODB.Recordset

If strCommand <> "" Then

strQuery = "exec master.dbo.xp_cmdshell '" & strCommand & "'"

txtStatus.Text = "Executing command, please wait..."

Set recResult = objConn.Execute(strQuery)

Do While Not recResult.EOF

strResult = strResult & vbCrLf & recResult(0)

recResult.MoveNext

Loop

End If

Set recResult = Nothing

txtStatus.Text = "Command completed successfully! "

cmdShellExec = strResult

Exit Function

errhandle:

MsgBox "Error: " & Err.Description, vbOKOnly + vbExclamation

End Function

Private Function wsShellExec(ByVal strCommand As String, ByVal strShell As String) As String

On Error GoTo errhandle:

Dim rsShell As New ADODB.Recordset

Dim strResult As String

objConn.Execute "DROP TABLE cmds0001"

objConn.Execute "CREATE TABLE cmds0001 (Info varchar(400),ID INT IDENTITY (1, 1) NOT NULL )"

Dim strScmdSQL As String

strScmdSQL = "declare @shell int " & vbCrLf

strScmdSQL = strScmdSQL & "declare @fso int " & vbCrLf

strScmdSQL = strScmdSQL & "declare @file int " & vbCrLf

strScmdSQL = strScmdSQL & "declare @isend bit " & vbCrLf

strScmdSQL = strScmdSQL & "declare @out varchar(400) " & vbCrLf

strScmdSQL = strScmdSQL & "exec sp_oacreate 'wscript.shell',@shell output " & vbCrLf

strScmdSQL = strScmdSQL & "exec sp_oamethod @shell,'run',null,'" & strShell & " " & Trim(strCommand) & ">c:\BOOTLOG.TXT','0','true' " & vbCrLf

strScmdSQL = strScmdSQL & "exec sp_oacreate 'scripting.filesystemobject',@fso output " & vbCrLf

strScmdSQL = strScmdSQL & "exec sp_oamethod @fso,'opentextfile',@file out,'c:\BOOTLOG.TXT' " & vbCrLf

strScmdSQL = strScmdSQL & "while @shell>0 " & vbCrLf

strScmdSQL = strScmdSQL & "begin " & vbCrLf

strScmdSQL = strScmdSQL & "exec sp_oamethod @file,'Readline',@out out " & vbCrLf

strScmdSQL = strScmdSQL & "insert into cmds0001 (info) values (@out) " & vbCrLf

strScmdSQL = strScmdSQL & "exec sp_oagetproperty @file,'AtEndOfStream',@isend out " & vbCrLf

strScmdSQL = strScmdSQL & "if @isend=1 break " & vbCrLf

strScmdSQL = strScmdSQL & "Else continue " & vbCrLf

strScmdSQL = strScmdSQL & "End "

objConn.Execute strScmdSQL

rsShell.Open "select * from cmds0001", objConn, 1, 1

Do While Not rsShell.EOF

strResult = strResult & rsShell("info") & vbCrLf

rsShell.MoveNext

Loop

objConn.Execute "DROP TABLE cmds0001"

wsShellExec = strResult

Exit Function

errhandle:

If Err.Number = -2147217900 Then

Resume Next

ElseIf Err.Number = -2147217865 Then

Resume Next

Else

MsgBox Err.Number & Err.Description

End If

End Function

Private Sub FileToDB(Col As ADODB.Field, DiskFile As String)

Const BLOCKSIZE As Long = 4096

'从一个临时文件中获取数据,并把它保存到数据库中

'col为一个ADO字段,DiskFile为一个文件名,它可以为一个远程文件。

Dim strData() As Byte '声明一个动态数组

Dim NumBlocks As Long '读写块数

Dim FileLength As Long '文件长度

Dim LeftOver As Long '剩余字节数

Dim SourceFile As Long '文件句柄

Dim i As Long

SourceFile = FreeFile '获得剩余的文件句柄号

Open DiskFile For Binary Access Read As SourceFile '以二进制读方式打开源文件。

FileLength = LOF(SourceFile) '获得文件长度

If FileLength = 0 Then

Close SourceFile '关闭文件

MsgBox DiskFile & " Empty or Not Found.", vbOKOnly + vbExclamation

Else

NumBlocks = FileLength \ BLOCKSIZE '获得块数

LeftOver = FileLength Mod BLOCKSIZE '最后一块的字节数

Col.AppendChunk Null '追加空值,清除已有数据

ReDim strData(BLOCKSIZE) '从文件中读取内容并写到文件中。

For i = 1 To NumBlocks

Get SourceFile, , strData

Col.AppendChunk strData

Next i

ReDim strData(LeftOver)

Get SourceFile, , strData

Col.AppendChunk strData

Close SourceFile

End If

End Sub

(感谢SQLTools作者"蓝色光芒"对我的帮助!)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有