Загрузка листа Excel и импорт данных в базу данных SQL Server с различным количеством столбцов - PullRequest
0 голосов
/ 24 февраля 2020

Я создаю функцию для импорта Excel (.Xlsx) в базу данных SQL с помощью c# кода и хранимой процедуры.

При нажатии кнопки импорта используется следующий код.

publi c DataSet ImportExcelXLS (строка FileName) {DataSet output = new DataSet (); попробуйте {

            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended 
            Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=1\"";                          
            OleDbConnection connExcel = new OleDbConnection(strConn);
            OleDbCommand cmdExcel = new OleDbCommand();
            cmdExcel.Connection = connExcel;
            connExcel.Open();
            DataTable dtExcelSchema;
            dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            connExcel.Close();
            connExcel.Open();
            OleDbDataAdapter da = new OleDbDataAdapter();
            DataSet ds = new DataSet();            

             string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();                             
            cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
            da.SelectCommand = cmdExcel;
            da.Fill(output);
            connExcel.Close();
        }
        catch (Exception ex)
        {
            throw;
        }
        return output;
    }      

и затем преобразуйте Excel в таблицу данных, используя следующую функцию.

public DataTable Convert_Commissionxlxs_toDataTable(string strFilePath)
    {
        ExL oExl = new ExL();
        FileUploadBO fileuploadBo_obj = new FileUploadBO();
        DataSet ds = new DataSet();
        ds = oExl.ImportExcelXLS(strFilePath, 0);
        DataTable dt = new DataTable();
        dt = ds.Tables[0];
        for (int i = 1; i < dt.Columns.Count + 1; i++)
        {
            dt.Columns["F" + i].ColumnName = fileuploadBo_obj.Get_ExcelColumnName(i);
        }  
            return dt;  
    }

после создания таблицы данных я передаю ее в хранимую процедуру следующим образом:

SQL Код процедуры:

    ALTER proc [dbo].[sp_Save]  
(  

        @Trailing_Credit dbo.[TrailingCredit_Type]  readonly    
)   

Этот код работает нормально. в SQL серверная хранимая процедура i Используется табличный параметр (пользовательская таблица). но когда изменяется мой номер столбца в файле Excel, выдается ошибка: «Вы передали 20 параметров вместо 32». Как я могу написать процедуру SQL, чтобы принимать любое количество столбцов, используя параметр с табличным значением. или любой другой лучший способ сделать это. Примечание. Количество столбцов в файле Excel меняется ежедневно.

Спасибо.

...