Вставить данные из Excel в базу данных, используя C # - PullRequest
0 голосов
/ 29 августа 2018

Привет всем, я хотел вставить данные из Excel. У меня есть три столбца в Excel Excela, Excelb, Excelc. Эти значения я хотел вставить в хранимую процедуру таблицы. Вот мой код, пожалуйста, исправьте меня

static void Main(string[] args)
{
    string Path = @"D:\Angular\SIRStatus.xlsx";
    OleDbConnection connStr = new 
    OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path + ";Extended Properties=Excel 12.0;");
    OleDbCommand cmd = new OleDbCommand("Select * from [Sheet1$]", connStr);
    connStr.Open();
    DbDataReader dr = cmd.ExecuteReader();
    // I dont now how to proceed after this Below code i tried but it is not working Please help me here with this

    foreach (var PCN in dr)
    {
        while (dr.Read())
        {
            SqlConnection con = new SqlConnection("Data Source=SQL ZCTS;Initial Catalog=ReportsDB;user id=sa;Password=Sa@12345");
            SqlCommand cmd1 = new SqlCommand("Insert1", con);
            cmd1.CommandType = CommandType.StoredProcedure;
            cmd1.Parameters.AddWithValue("@PCN", PCN);
            con.Open();
            cmd1.ExecuteNonQuery(); 
         } 
     }
 }

Последняя строка дает эту ошибку

Нет сопоставления между типом объекта System.Data.Common.DataRecordInternal и собственным типом известного управляемого поставщика

1 Ответ

0 голосов
/ 30 августа 2018

Попробуйте этот метод

 public static void SaveFileToDatabase(string filePath)
    {
        String strConnection = "SQL Connection";

        String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath);

        using (OleDbConnection excelConnection = new OleDbConnection(excelConnString))
        {

            using (OleDbCommand cmd = new OleDbCommand("Select [A],[B],[C],[D] from [Plan1$]", excelConnection))
            {
                excelConnection.Open();
                using (OleDbDataReader dReader = cmd.ExecuteReader())
                {
                    using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
                    {

                        sqlBulk.DestinationTableName = "Table in SQL";
                        sqlBulk.WriteToServer(dReader);
                    }
                }
            }
        }
    }

Позже вы переходите к своей кнопке (пример) и ставите это

            if (OpenFileDialog.ShowDialog() == DialogResult.OK)
        {
            string directoryPath = OpenFileDialog.FileName;
            Excel.SaveFileToDatabase(directoryPath);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...