使用存储过程读取excel文件

时间:2017-05-06 18:16:45

标签: c# sql-server excel

我正在尝试开发一个工具,用户浏览计算机以上传Excel文件,然后将其保存到数据库中。以下代码使用存储过程读取Excel工作表,然后将数据导入数据库。现在我想添加一个功能,用户也可以从Excel文件中选择特定的列。

我的问题是:我可以将列的名称作为参数传递给存储过程,因此只保存这些列,而不是整个Excel文件,因为我试过了,但我收到了错误

c#代码:

string CommandText = "spx_ImportFromExcel";

//Read Excel Sheet using Stored Procedure
//And import the data into Database Table
String strConnString = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
SqlConnection con = new SqlConnection(strConnString);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = CommandText;

cmd.Parameters.Add("@SheetName", SqlDbType.VarChar).Value = ddlSheets.SelectedItem.Text;
cmd.Parameters.Add("@FilePath", SqlDbType.VarChar).Value = FolderPath + FileName;
cmd.Parameters.Add("@HDR", SqlDbType.VarChar).Value = rbHDR.SelectedItem.Text;
cmd.Parameters.Add("@TableName", SqlDbType.VarChar).Value = txtTable.Text;

cmd.Connection = con;

存储过程:

ALTER PROCEDURE [dbo].[spx_ImportFromExcel] (
    @SheetName varchar(20),
    @FilePath varchar(100),
    @HDR varchar(3),
    @TableName varchar(50)
) 
AS
BEGIN
    DECLARE @SQL nvarchar(1000)

    IF OBJECT_ID (@TableName,'U') IS NOT NULL
        SET @SQL = 'INSERT INTO ' + @TableName + ' SELECT * FROM OPENDATASOURCE'
    ELSE
        SET @SQL = 'SELECT * INTO ' + @TableName + ' FROM OPENDATASOURCE'

    SET @SQL = @SQL + '(''Microsoft.ACE.OLEDB.12.0'',''Data Source='
    SET @SQL = @SQL + @FilePath + ';Extended Properties=''''Excel 12.0;HDR=' 
    SET @SQL = @SQL + @HDR + ''''''')...[' 
    SET @SQL = @SQL + @SheetName + ']'

    EXEC sp_executesql @SQL
END

0 个答案:

没有答案