0 / 0 / 0
Регистрация: 16.10.2010
Сообщений: 77
1

Вставить строки в таблицу из файла Excel

14.08.2011, 01:31. Показов 6340. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, пожалуйста ,как лучше осуществить задумку.
Есть файл excel' евый, нужно вытащить из него данные а поместить в готовую таблицу в базе SQL.
Если через Dataset, OledbAdapter, то как я понял, пока в датасете не произойдут изменения, в таблицу, через адаптер ничего не закинется (командами Update) А у меня получается готовый датасет и мне его как-то надо закинуть в базу.. Вот только как?
Можно выложить примерчик? Ну или направить в нужное русло.

Добавлено через 10 минут
P.S. Столбцы в Ехеле соответствуют полям в таблице базы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2011, 01:31
Ответы с готовыми решениями:

Скопировать предыдущие строки перед определенной строкой из текстового файла и вставить их в столбец Excel
Доброго времени суток! У меня есть текстовый файл, вида ... Фильм1...

Вставить excel таблицу
Здравствуйте подскажите пожалуйста, как вставить таблицу excel в joomla без потерь формул?. или...

Слив 3-х MS Excel таблиц в одну MS Access таблицу с добавлением столбцас именем файла для каждой отдельно взятой строки
Добрый день, я немного профан в MS Access. Так что не судите строго, есть три файла MS Excel...

Вставить строку в таблицу excel
Здравствуйте. Не могу понять как вставить новую строку в таблицу excel. Есть таблица 2х2, хочу...

25
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
14.08.2011, 01:43 2
А что, датасет напрямую связан с файлом Excel?
Почему нельзя осуществить чтение из книги и добавление в таблицу?
0
0 / 0 / 0
Регистрация: 16.10.2010
Сообщений: 77
14.08.2011, 12:05  [ТС] 3
Я понимаю, что туплю, но как это сделать? Хотя бы метод подскажите?
0
195 / 187 / 9
Регистрация: 14.06.2011
Сообщений: 495
14.08.2011, 16:32 4
Памирыч имел ввиду следущее

У тебя есть Dataset

нужно вытащить из экселя поместить в Dataset и из Dataset уже в SQL

Dataset обязателен ? Может считаем данные из экселя и сразу кинем их в SQL ? минуя Dataset.
0
0 / 0 / 0
Регистрация: 16.10.2010
Сообщений: 77
14.08.2011, 18:06  [ТС] 5
Да я понял. Вопрос- как это сделать? Через чего?
0
557 / 434 / 21
Регистрация: 16.12.2010
Сообщений: 953
14.08.2011, 18:08 6
Через что прочитать Excel? Вы это хотели спросить?
0
0 / 0 / 0
Регистрация: 16.10.2010
Сообщений: 77
14.08.2011, 18:15  [ТС] 7
Ребят, я знаю как прочесть Excel, разными способами. Просто затрудняюсь в запихивании данных из Ехеля в SQl, напрямую и через датасет, без разницы.
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
14.08.2011, 18:17 8
Можно сначала связать экзель с датасетом или датагридвью и закинуть туда данные, затем подключиться к базе sql и закинуть данные из датасета в sql базу данных

Добавлено через 1 минуту
Цитата Сообщение от yur1221 Посмотреть сообщение
Просто затрудняюсь в запихивании данных из Ехеля в SQl, напрямую и через датасет, без разницы
а в чем непосредственно затруднение? как с датасетом связать экзель файл или как связать датасет с sql базой данных?
0
0 / 0 / 0
Регистрация: 16.10.2010
Сообщений: 77
14.08.2011, 18:49  [ТС] 9
Цитата Сообщение от Eugene22 Посмотреть сообщение
Можно сначала связать экзель с датасетом или датагридвью и закинуть туда данные, затем подключиться к базе sql и закинуть данные из датасета в sql базу данных
В том то и дело что не получается. Выходит так что пока в датагриде что-нить не изменишь, в базу ничего не закинешь? Потому что применяется метод Update, который апдейтит базу толкьо после изменений, но тут то получается изменений нет. Либо как то адаптеру сказать, что произошли изменения, давай, пихай.
Делал так:
VB.NET
1
2
3
4
5
6
7
8
dbadapter = New SqlDataAdapter("select * from temp", mySQLConn)
         Dim builder As SqlCommandBuilder = New SqlCommandBuilder(dbadapter)
         Dim InsertCommand = New SqlCommand("insert into temp (price,inputid) values (@price,@inputid)", mySQLConn)
        InsertCommand.Parameters.Add("@price", SqlDbType.Money, 8, "price")
         InsertCommand.Parameters.Add("@inputid", SqlDbType.VarChar, 4, "inputid")
         dbadapter.InsertCommand = InsertCommand
'        ExcDS.AcceptChanges()
         dbadapter.Update(ExcDS, ExcDS.Tables(0).ToString)
Где ExcDS это датасет с ехеля, он заполнен ,все норм, в датагриде показывается.
Но не апдейтит.

Добавлено через 16 минут
Попробовал так, получилось:

VB.NET
1
2
3
4
5
6
7
8
9
10
Dim ExcConn As New adodb.Connection
        Dim recaff As Integer
        Dim excstring = "select * INTO temp FROM " & _
        "OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
        "'Excel 8.0;Database=" & PrFileName & "', " & _
        "'select * from [Лист1$]')"
        ExcConn.ConnectionString = "Provider=SQLOLEDB;Data Source=*;Initial Catalog=newcodb;User Id=*;Password=*"
        ExcConn.Open()
        ExcConn.Execute(excstring, recaff)
        ExcConn.Close()
А через датасет никак?
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
14.08.2011, 19:03 10
Честно говоря, я думал, что нужен просто конвентор из одной базы в другую, а теперь что-то вообще непонятно, что вам надо.
0
0 / 0 / 0
Регистрация: 16.10.2010
Сообщений: 77
14.08.2011, 19:16  [ТС] 11
Хорошо, объясню поподробнее. Что-то не получается у меня объяснять в тексте
Есть файл Excel, есть база, в ней таблица temp, у которой поля совпадают со столбцами файла.
Хочу вывести содержимое файла в DataGridView и тут же заполнить таблицу temp содержимым этого DataGridView. Надеюсь- объяснил
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
14.08.2011, 19:20 12
А то есть вы хотите заполнить DataGridView из базы SQL, а затем из DataGridView передать все в экзель, так?
0
0 / 0 / 0
Регистрация: 16.10.2010
Сообщений: 77
14.08.2011, 19:25  [ТС] 13
Уф.. нет
Из ехеля в датагрид и одновременно в sql
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
14.08.2011, 19:36 14
Лучше сделать так - сначала из экзеля в DataGridView, а из него в sql.
Из экзеля в DataGridView
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
Private connection1 As OleDbConnection= New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Exp\Database.xls;Extended properties = Excel 8.0")
        'Выборка производится из первого листа (Лист1)
        Private selection  As String = "SELECT * FROM [Лист1$]"
        Private command1 As OleDbCommand
        Private da As OleDbDataAdapter 
        Private ds As DataSet= New DataSet()
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            connection1.Open()
            command1 = New OleDbCommand(selection, connection1)
            da = New OleDbDataAdapter(command1)
            da.Fill(ds)
            dataGridView1.DataSource = ds.Tables(0)
        End Sub
Похожим способом паралельно создается подключение к базе sql, только используется не OleDb, а SqlClient и прописывается для адаптера sql метод Update.
1
0 / 0 / 0
Регистрация: 16.10.2010
Сообщений: 77
15.08.2011, 10:53  [ТС] 15
Как писал выше- я уже это делал. .но база не апдейтится.. Датасет заполняется, в датагриде показывается ,а в базе табла не заполняется
В том то и дело что не получается. Выходит так что пока в датагриде что-нить не изменишь, в базу ничего не закинешь? Потому что применяется метод Update, который апдейтит базу толкьо после изменений, но тут то получается изменений нет. Либо как то адаптеру сказать, что произошли изменения, давай, пихай.
Делал так:

VB.NET
1
2
3
4
5
6
7
8
dbadapter = New SqlDataAdapter("select * from temp", mySQLConn)
         Dim builder As SqlCommandBuilder = New SqlCommandBuilder(dbadapter)
         Dim InsertCommand = New SqlCommand("insert into temp (price,inputid) values (@price,@inputid)", mySQLConn)
        InsertCommand.Parameters.Add("@price", SqlDbType.Money, 8, "price")
         InsertCommand.Parameters.Add("@inputid", SqlDbType.VarChar, 4, "inputid")
         dbadapter.InsertCommand = InsertCommand
'        ExcDS.AcceptChanges()
         dbadapter.Update(ExcDS, ExcDS.Tables(0).ToString)
Где ExcDS это датасет с ехеля, он заполнен ,все норм, в датагриде показывается.
Но не апдейтит.
Пробовал и dbadapter.InsertCommand и просто dbadapter.Update, не помогает.

Добавлено через 15 часов 0 минут
Т.е. никак? Или опять не так объяснил?
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
15.08.2011, 14:16 16
yur1221, смотрите, вы создали подключение к экзелю, вторая часть - создать паралельное подключение к базе sql. Вы можете создать подключение к базе sql?
0
0 / 0 / 0
Регистрация: 16.10.2010
Сообщений: 77
15.08.2011, 15:11  [ТС] 17
а разве в предыдущем сообщении не подключение к сиквельной базе?
Поключаюсь к базе, пытаясь заполнить её из датасета, в который я залил данные из ехеля.
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
15.08.2011, 15:30 18
yur1221, ну там немного непонятный код.
Во-первых, там не видно, подключаетесь ли вы к базе ли нет (Я не вижу там объекта Connection и чтобы соединение было открыто)
Во-вторых, тут можно обойтись без команд вставки, тем более тут нужен Update, а не Insert
В-третьих, непонятно задана команда Update.
К примеру вот код обновления бд (взят на примере аксеса)
VB.NET
1
2
3
4
'Задаем команду Update и обновляем данные в базе данных
        adapter1.UpdateCommand = comanbuilder.GetUpdateCommand()
        adapter1.Update(AllTables, "Translator")
        AllTables.AcceptChanges()
тут adapter1 - OleDbDataAdapter, comanbuilder - объект OleDbCommandBuilder, подключенный к этому адаптеру, AllTables - DataSet, "Translator" - название таблицы в датасете, которая обновляется. Только вместо OleDb вам надо взять те же объекты из соответствующего прастранства имен - то есть SqlDataClient

Если все сразу не получается, попробуйте по частям - сначала просто провести обновление таблицы в базе sql, а потом уже соединить с кодом для экзеля.
0
0 / 0 / 0
Регистрация: 16.10.2010
Сообщений: 77
15.08.2011, 21:00  [ТС] 19
Ну вот так делаю, и нифига

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 Public Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Public mySQLConnString As String = "Data Source=*;Initial Catalog=newcodb;" _
    & "User Id=*;Password=*;Trusted_Connection=False;"
    Public mySQLConn As SqlConnection
    Public dbadapter As SqlDataAdapter
    Public dbdataset As New DataSet
    Public myOLEDBconn As OleDbConnection
    Dim ExcDA As OleDbDataAdapter
    Dim ExcDS As New DataSet
        Dim ExcComm = "select * from [Лист1$]"
        Dim ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PrFileName & _
        ";Extended Properties='Excel 12.0 Xml;HDR=YES';"
        myOLEDBconn = New OleDbConnection(ConnectionString)
        myOLEDBconn.Open() ' соединение с Ехелем
        Dim ExcDA = New OleDbDataAdapter(ExcComm, myOLEDBconn) ' считываю данные с Ехеля
        ExcDA.Fill(ExcDS, "price") ' заливаю их в датасет
        DataGridView1.DataSource = ExcDS.Tables("price")  ' показываю их в датагриде
        myOLEDBconn.Close()
        mySQLConn = New SqlConnection(mySQLConnString) ' соединение с базой данных SQL
        dbadapter = New SqlDataAdapter("select * from temp", mySQLConn) ' инициализирую адаптер для SQL
        Dim builder As SqlCommandBuilder = New SqlCommandBuilder(dbadapter)
        dbadapter.InsertCommand = builder.GetInsertCommand ' создаю комманду вставки данных 
        dbadapter.Update(ExcDS, ExcDS.Tables(0).ToString) ' якобы апдейчу датасет и базу?
        ExcDS.AcceptChanges() ' ну и т.д....
        MsgBox("Заполнено!")
        mySQLConn.Close()
        ExcDA = Nothing
    End Sub
В датагриде все выводится, с Ехеля читается, но ничего не заполняется в базе SQL. Вот в чем фишка. Теперь, надеюсь, объяснил?
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
15.08.2011, 21:06 20
Цитата Сообщение от yur1221 Посмотреть сообщение
dbadapter.InsertCommand = builder.GetInsertCommand
а это зачем? я же написал что вам команда Update, а не Insert нужна
0
15.08.2011, 21:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2011, 21:06
Помогаю со студенческими работами здесь

Возможно ли вставить таблицу excel в програму ?
Можно в програму вставить таблицу, лутше лист с excel ?

Вставить данные из Excel в таблицу world
здравствуйте! помогите пожалуйста с кодом. надо из ексель выгрузить данные через макрос в макет...

Можно в форму вставить таблицу excel
Добрый день. Можно в форму вставить таблицу excel для дальнейшей работы с ячейками именно в форме.

Вставить excel таблицу на страницу сайта
Добрый день. Возникла нужда вставлять на страницу сайта простую таблицу Excel. Нет ли у кого...

Вставить полноразмерные например таблицу Excel на страницу
ребята нужна ваша помошь , есть вот такой сайт gumbetcrb.ru не могу вставить полноразмерные...

Вытащить определенные данные из Excel и вставить их в таблицу dataGridView
Подскажите, пожалуйста. Как вытащить определенные данные из Excel и вставить их в таблицу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru