4

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

谢谢

4

4 回答 4

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 位应用程序。

于 2013-09-11T12:19:47.467 回答
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
于 2014-09-01T04:09:23.980 回答
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
        }
    }
于 2013-09-11T03:21:48.377 回答
0

对的,这是可能的。以下是可能的基本步骤的鸟瞰图:

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