使用ASP.net(Vb.net)将上载的Excel文档中的数据插入数据库

时间:2013-09-11 03:14:00

标签: asp.net sql-server vb.net file-upload

我正在开发一个Web应用程序,我想知道是否有可能在上传后使用Asp.net(VB.net)将Excel文件的数据字段信息插入我的SqlServer数据库?

感谢的

4 个答案:

答案 0 :(得分:1)

在VB.NET中试用这段代码:

Protected Sub btnExport(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim TheFile As FileInfo = New FileInfo(MapPath(".") & "\" & "filename.xls")

    ' Connection String to Excel Workbook 2010 (xlsx)
    ' Dim excelConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("~\directory\filename.xlsx") + ";Extended Properties=""Excel 12.0 Xml;HDR=YES;"""

    ' Connection String to Excel Workbook 2003 (xls)
    Dim excelConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("~\directory\filename.xls") + ";Extended Properties=""Excel 8.0;HDR=YES;"""

    ' Create Connection to Excel Workbook
    Using connection As New OleDbConnection(excelConnectionString)
        Dim command As New OleDbCommand("Select * FROM [sheetname$] ", connection)

        connection.Open()

        ' Create DbDataReader to Data Worksheet
        Using dr As DbDataReader = command.ExecuteReader()

            ' SQL Server Connection String
            Const sqlConnectionString As String = "Data Source=server; Initial Catalog=database; Persist Security Info=True;User ID=userid;Password=password"

            ' Bulk Copy to SQL Server
            Using bulkCopy As New SqlBulkCopy(sqlConnectionString)
                bulkCopy.DestinationTableName = "SqlServerTableName"
                bulkCopy.WriteToServer(dr)
            End Using
        End Using
    End Using
End Sub

其他提示:尝试将IIS设置为运行32位应用程序。

答案 1 :(得分:0)

是的,这是可能的。以下是鸟类对可能的基本步骤的看法:

  1. 上传后 - 以临时唯一名称保存Excel文件
  2. 打开与上传文件的OLEDB连接
  3. 读取它(通过OleDbDataReader - 如果它是一个巨大的文件,所以你不必一次将它加载到内存中,或者如果它很小就加载到DataTable中)
  4. 运行查询,存储过程以使用获取的数据更新SqlServer数据库
  5. 删除上传的文件

答案 2 :(得分:0)

试试这个

public void export(string excelfilepath)
{

    string ssqltable = "tdatamigrationtable";

    string myexceldataquery = "select student,rollno,course from [sheet1$]";
    try
    {
        //create our connection strings
        string sexcelconnectionstring = @"provider=microsoft.jet.oledb.4.0;data source=" + excelfilepath +
        ";extended properties=" + "\"excel 8.0;hdr=yes;\"";
        string ssqlconnectionstring = "server=mydatabaseservername;user
        id=dbuserid;password=dbuserpassword;database=databasename;connection reset=false";

        //series of commands to bulk copy data from the excel file into our sql table
        oledbconnection oledbconn = new oledbconnection(sexcelconnectionstring);
        oledbcommand oledbcmd = new oledbcommand(myexceldataquery, oledbconn);
        oledbconn.open();
            oledbdatareader dr = oledbcmd.executereader();
            sqlbulkcopy bulkcopy = new sqlbulkcopy(ssqlconnectionstring);
            bulkcopy.destinationtablename = ssqltable;
            while (dr.read())
            {
                bulkcopy.writetoserver(dr);
            }

            oledbconn.close();
        }
        catch (exception ex)
        {
            //handle exception
        }
    }

答案 3 :(得分:0)

Imports System.Data.Common
Imports System.Data.SqlClient

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim fname As String
        Using ofd As New OpenFileDialog
            If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
                fname = ofd.FileName

            End If
        End Using

        Dim olecon As String = "Provider=Microsoft.ACE.OLEDB.12.0 ;Data Source=" & fname & ";Extended Properties=""Excel 12.0;IMEX=1;HDR=YES;"""

        Dim dBaseConnection As New System.Data.OleDb.OleDbConnection(olecon)

        dBaseConnection.Open()


        SSQL = "select  [LOT],[IMAGE],[STYLENO],[VENDOR] from [Sheet1$]"

        Dim cmd As New OleDbCommand(SSQL, dBaseConnection)

        Dim da As New OleDbDataAdapter(cmd)

        Dim ds As New DataSet

        da.Fill(ds)


        Using dr As DbDataReader = cmd.ExecuteReader

            If SHCONNECTION.State = ConnectionState.Closed Then
                Call SHconn(MCONNECTIONSTRING)
            End If

            Using bulkCopy As New SqlBulkCopy(MCONNECTIONSTRING)
                bulkCopy.DestinationTableName = "DBimage"
                bulkCopy.WriteToServer(ds)
            End Using
        End Using
    End Sub
End Class