注册 登录
编程论坛 VB.NET论坛

[求助]想写一个VB.NET+SQL的winform上传软件,不知道怎么写,谁能帮帮我?

weichch123 发布于 2010-04-18 23:35, 1938 次点击
我是一个初学者,想写一个的winform上传软件,不知道怎么写。
想达到的基本功能:
用这个软件只能上传小于 5MB的word文件,并将文件保存到指定的文件夹,SQL数据库记录保存路径、上传人名字、日期。
就像实现这么一个功能,在网上找了很多资 料 找不到合适的 不知道该怎么写,谁能帮帮我啊?


[ 本帖最后由 weichch123 于 2010-4-19 00:00 编辑 ]
12 回复
#2
weichch1232010-04-18 23:49
没人肯帮我吗?
#3
weichch1232010-04-19 00:01
~~~~~~
#4
shenhaoli2010-04-19 09:49
能直接把文件存放到SQL SERVER服务器上吗???
我想要实现此功能是不是应该有服务器端平台的支持,客户端传给服务器端,服务器端再创建本地文件??
不如换一种思路
建一个FTP站点,文件直接上传到该FTP站点,这个也许实现更容易,只需找一下 FTP上传方面的资料
实现后分享一下
我是从VB刚转过来的,还很生,只能谈谈想法,希望有帮助

[ 本帖最后由 shenhaoli 于 2010-4-19 20:57 编辑 ]
#5
weichch1232010-04-19 22:00
嗯 也对 可能要创建两个程序 一个服务器端 一个客户端
#6
weichch1232010-04-19 22:04
如果是用FTP的话 就不需要写程序了 到处都能下载到 哎
#7
不说也罢2010-04-20 18:06
1、由客户端提交请求,在服务器端创建存储过程,用于文件的存储(需要用到master.xp_cmdshell方法)
2、由客户端提交请求,在服务器中创建临时数据库,将上传的文件用二进制存入临时数据库
3、由客户端提交请求,调用临时创建的存储过程,将临时存入的二进制文件由服务器端执行TextCopy.exe文件实现存储文件
4、删除创建的临时数据库

周末有时间来写一个例子
#8
weichch1232010-04-21 23:51
嗯 谢谢 不说也罢 希望能有个例子 因为我实在不会写 想有个例子学习一下
#9
weichch1232010-04-22 16:10
研究了半天,仿照网上写了这样的代码,但是不能上传WORD文件,这个要怎么修改才能上传word文件?

Imports System
Imports System.Drawing
Imports System.Collections
Imports
Imports System.Windows.Forms
Imports System.Data
Imports System.Drawing.Imaging
Imports
Imports System.Data.SqlClient

Public Class Form1
  Private fs As FileStream
  Private ds As DataSet
  Private conn As New SqlConnection("server=localhost;database=ceshi;integrated security=true;")
  Private currentpos As Integer = 9

  Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
  Dim Opendlg As New OpenFileDialog
  Opendlg.Title = "Select a picture file"
  Opendlg.Filter = "(*.doc)|*doc|(*.jpg)|*.jpg"
  Opendlg.ShowDialog()
  lblPath.Text = Opendlg.FileName.ToString()
  fs = New FileStream(Opendlg.FileName.ToString(), FileMode.Open, FileAccess.Read)
  'PictureBox1.Image = Image.FromFile(Opendlg.FileName.ToString())
  End Sub

  Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
  Dim sqlcomm As New SqlCommand
   = "INSERT INTO employees (lastname,firstname,photo) VALUES (@lastname,@firstname,@photo)"
  sqlcomm.Connection = conn
  Dim Data(fs.Length) As Byte
  fs.Read(Data, 0, Int(fs.Length))
  Dim prm1 As New SqlParameter("@lastname", txtLN.Text)
  Dim prm2 As New SqlParameter("@firstname", txtFN.Text)
  Dim prm3 As New SqlParameter("@photo", SqlDbType.VarBinary, Int(fs.Length), ParameterDirection.Input, False, 0, 0, "", DataRowVersion.Current, Data)
  sqlcomm.Parameters.Add(prm1)
  sqlcomm.Parameters.Add(prm2)
  sqlcomm.Parameters.Add(prm3)
  Try
  conn.Open()
  sqlcomm.ExecuteNonQuery() '执行插入语句
  conn.Close()
  fs.Close()
  Catch ex As Exception
  MsgBox(ex.Message)
  End Try
  End Sub
End Class
#10
ouxianzhi5202010-04-23 09:09
Opendlg.Title = "Select a picture file"
  Opendlg.Filter = "(*.doc)|*doc|(*.jpg)|*.jpg"
这一句改为
Opendlg.Title = "Select a picture file"
  Opendlg.Filter = "(*.doc)|*.doc|(*.jpg)|*.jpg"
看行不行
#11
weichch1232010-04-23 22:24
改了 还是不行 我想知道怎么打开上传到SQL里面的word文件?
#12
不说也罢2010-04-25 10:01
程序代码:
Imports System
Imports System.Drawing
Imports System.Collections
Imports Imports System.Windows.Forms
Imports System.Data
Imports System.Drawing.Imaging
Imports Imports System.Data.SqlClient

Public Class Form1
    Private fs As FileStream
    Private ds As DataSet
    Private conn As New SqlConnection("SQLSERVER连接字符串,楼主自已写吧,注意在服务器中使用名为ceshi的数据库")
    Private currentpos As Integer = 9

    Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
        Dim Opendlg As New OpenFileDialog
        Opendlg.Title = "Select a picture file"
        Opendlg.Filter = "(*.doc)|*doc|(*.jpg)|*.jpg|全部文件|*.*"
        Opendlg.ShowDialog()
        lblPath.Text = Opendlg.FileName.ToString()
        fs = New FileStream(Opendlg.FileName.ToString(), IO.FileMode.Open, IO.FileAccess.Read)
    End Sub

    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
        '读入文件数据  
        Dim imgData(fs.Length - 1) As Byte
        fs.Read(imgData, 0, fs.Length - 1)
        fs.Close()

        Dim tempAdapter As SqlDataAdapter
        Dim tempDataset As New DataSet
        '打开数据库连接  
        conn.Open()
        '创建一个临时表用于存储上传的数据
        Dim sqlcmd As New SqlCommand
        sqlcmd.Connection = conn
         = "if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tmpFile]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[tmpFile]"
        sqlcmd.ExecuteNonQuery()
         = "CREATE TABLE [tmpFile] ([id] [int] IDENTITY (1, 1) NOT NULL ,[photo] [Image] NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]"
        sqlcmd.ExecuteNonQuery()

        tempAdapter = New SqlDataAdapter("SELECT   *   FROM   tmpFile   WHERE   1=0", conn)
        Dim cb As New SqlCommandBuilder(tempAdapter)
        tempAdapter.Fill(tempDataset)
        '插入一条记录  
        Dim tempDataRow As DataRow
        tempDataRow = tempDataset.Tables(0).NewRow()
        tempDataRow("photo") = imgData
        tempDataset.Tables(0).Rows.Add(tempDataRow)
        tempAdapter.Update(tempDataset)
        '数据上传结束

        Windows.Forms.Application.DoEvents()

        '下面的代码将上传的数据以文件形式存入SQLSERVER服务器的磁盘中
        '下面的代码需要在窗体中画四个文本框:
        'txtServer——服务器名称,txtUserName——登录用户名,——登录密码,txtDestFileName——需要保存到服务器的完整路径及文件名
        '调用服务器端textcopy.exe,将上传的数据以文件形式存入SQLSERVER服务器的磁盘中
        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 ceshi"'ceshi为数据库名
        strExec = strExec & " /T tmpFile"'tmpFile为创建的临时表
        strExec = strExec & " /C photo"'photo为创建的临时表tmpFile中的image字段
        strExec = strExec & " /F " & txtDestFileName.Text
        strExec = strExec & " /W " & Chr(34) & "where id=1" & Chr(34)
        strExec = strExec & " /O"
         = "exec master.dbo.xp_cmdshell '" & strExec & "'"
        sqlcmd.ExecuteNonQuery()
        Windows.Forms.Application.DoEvents()
        '释放对象
        sqlcmd.Dispose()
        tempAdapter.Dispose()
        tempDataset.Dispose()
        fs.Close()
        conn.Close()
        MsgBox("OK,数据上传完毕")
    End Sub

End Class

上面的代码用于SQLSERVER客户端将本地文件上传并保存到服务器端指定的文件夹

至于如何限定客户端上传文件的大小及如果在数据库中存入上传文件的路径的代码,楼主自已应当能够完成

楼主拿去研究吧,以上代码在VS2008+SQLSERVER2000中测试通过

楼主下一步要做的,就是多用户并发的问题(创建临时表)以及服务器中文件已经存在的问题。
#13
2010-05-04 20:42
加油
1