Импорт файла Excel в SQL с другой схемой (asp.net C #) - PullRequest
0 голосов
/ 09 мая 2019

Я создаю программу, в которой пользователь импортирует файл Excel в базу данных (SQLServer) ... Но я не хочу указывать имя столбца, потому что это делает мою программу очень ограниченной этими именами столбцов ...Я не знаю, как очень хорошо работать с датируемыми строками и строками, но я думаю, что это единственный путь, верно?(я новичок, извините)

Вот код Ребята:

rotected void Upload_Click(object sender, EventArgs e)
        {
            string sSheetName;
            DataTable dtTablesList = new DataTable();

            string excelPath = Server.MapPath("~/Nova pasta/") + Path.GetFileName(FileUpload1.PostedFile.FileName);
            string filepath = Server.MapPath("~/Nova pasta/") + Path.GetFileName(FileUpload1.FileName);
            string filename = Path.GetFileName(filepath);
            FileUpload1.SaveAs(excelPath);
            string ext = Path.GetExtension(filename);
            String strConnection = @"Data Source=PEDRO-PC\SQLEXPRESS;Initial Catalog=costumizado;Persist Security Info=True;User ID=sa;Password=1234";
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";

            OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);

            excelConnection.Open();
            dtTablesList = excelConnection.GetSchema("Tables");

            if (dtTablesList.Rows.Count > 0)
            {
                sSheetName = dtTablesList.Rows[0]["TABLE_NAME"].ToString();


                for (int j = 0; j < dtTablesList.Rows.Count; j++)
                {
                    for (int i = 0; i < dtTablesList.Columns.Count; i++)
                    {
                        Debug.Write(dtTablesList.Columns[i].ColumnName + " ");
                        Debug.WriteLine(dtTablesList.Rows[j].ItemArray[i]);

                    }
                }

                Debug.WriteLine(dtTablesList.Rows.Count);
                foreach (DataRow dataRow in dtTablesList.Rows)
                {
                    foreach (var item in dataRow.ItemArray)
                    {
                        Debug.WriteLine(item);
                    }
                }

                    OleDbCommand cmd = new OleDbCommand("Select * from ["  + sSheetName + "]", excelConnection);

                    cmd.ExecuteNonQuery();
            }

1 Ответ

0 голосов
/ 09 мая 2019

Я не уверен, что именно вы ищете.В прошлом я использовал компонент под названием EPPlus.Я использовал это решение, чтобы превратить рабочий лист в таблицу данных.См. Здесь: Excel в DataTable с использованием EPPlus - Excel заблокирован для редактирования

Редактировать: если у вас есть таблица данных вашего листа Excel, вы можете сделать что-то вроде этого:

        using (SqlConnection con = new SqlConnection("connectionstring"))
        {
            try
            {
                con.Open();
                foreach (DataRow dr in worksheetTable.Rows)
                {
                    using (SqlCommand myCommand = new SqlCommand("insert into myTable (Products, column2) values (@prod, @col2)", con))
                    {
                        myCommand.CommandType = CommandType.Text;

                        myCommand.Parameters.AddWithValue("prod", dr[0]);
                        myCommand.Parameters.AddWithValue("col2", dr[1]);

                        int result = myCommand.ExecuteNonQuery();
                    }
                }
            }
            catch (SqlException ex)
            {
                //handle errors here
            }
            catch (Exception ex)
            {
                //handle errors here
            }
            finally
            {
                con.Close();
            }
        }

(Код может быть не идеальным, я его не тестировал)

Это зависит от структуры вашего Excel и базы данных.Я надеюсь, что это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...