Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用存储过程读取excel文件_C#_Sql Server_Excel - Fatal编程技术网

C# 用存储过程读取excel文件

C# 用存储过程读取excel文件,c#,sql-server,excel,C#,Sql Server,Excel,我正在尝试开发一种工具,用户可以浏览他的计算机上传Excel文件,然后将其保存到数据库中。下面的代码使用存储过程读取Excel工作表,然后将数据导入数据库。现在我想添加一个功能,用户还可以从Excel文件中选择特定的列 我的问题是:我是否可以将列的名称作为参数传递给存储过程,以便只保存这些列,而不保存整个Excel文件,因为我尝试了这样做,但出现了错误 c代码: string CommandText = "spx_ImportFromExcel"; //Read Excel Sheet usi

我正在尝试开发一种工具,用户可以浏览他的计算机上传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

通常,您收到的错误是非常有价值的,因此您应该明确地将其包括在内。此外,我猜这是错误的:Excel-我不认为分隔符在任何地方都是2 x',但我建议使用不同的方法。将Excel文件读入数据集,将其保存在内存会话变量中,让用户选择列,然后从数据集重新创建Excel文件或csv文件。