Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
1

Несовпадение типов при вставке в базу данных

18.03.2013, 10:09. Показов 5259. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Народ, делаю импорт данных из Excel в MSSQL. Сначала залил все данные в DataTable, а уже из нее с помощью SQLBulkCopy пытаюсь сделать вставку на сервер. Однако возникает проблема: на сервере одно из полей таблицы имеет тип binary(8), а в Excel'e соответствующий стобец значения хранит в текстовом формате, соответственно при импорте ошибка "Данное значение типа String из источника данных не может быть преобразовано в тип binary указанного столбца назначения.". Подскажите пожалуйста где и что нужно поправить. Вот код:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim dtExcel = New DataTable()
        Dim SourceConstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + filename + "';Extended Properties= 'Excel 12.0;HDR=Yes;IMEX=1'"
        Dim con = New System.Data.OleDb.OleDbConnection(SourceConstr)
        Dim query = "Select * from [Лист1$]"
        Dim data = New System.Data.OleDb.OleDbDataAdapter(query, con)
        Try
            data.Fill(dtExcel)
        Catch ex As Exception
            MsgBox(ex.Message) : Exit Sub
        End Try
 
        Dim BulkCopy = New SqlBulkCopy(Connection)
        BulkCopy.DestinationTableName = "dbo._tmp"
        If (Connection.State = ConnectionState.Closed) Then Connection.Open()
        BulkCopy.WriteToServer(dtExcel)
        Connection.Close()
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2013, 10:09
Ответы с готовыми решениями:

Несоответствие типов данных при работе с БД
Пишет несоответствие типов данных, не пойму почему Public Class add_donor Dim Con As New...

Несовпадение типов данных при вызове функций
Код не компилируется из-за несовпадения типов переменных. Я уже запутался и не понимаю что не так) ...

Авто дописывание данных при вставке в базу данных
Здравствуйте, как мне сделать что бы посетитель писал в строку свой сайт без http:// , то этот...

Непонятное исключение при вставке в базу данных
Проблема заключается в следующем, вылазит при попытке вставки в БД, используя MS SQL 2008 Express,...

11
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
18.03.2013, 10:49 2
дык тут бы надо саму таблицу в БД увидеть. Может именно в ней нужный столбец имеет тип binary. Тогда ты туда строку не загонишь.
1
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
18.03.2013, 10:53  [ТС] 3
Цитата Сообщение от Kruds Посмотреть сообщение
на сервере одно из полей таблицы имеет тип binary(8)
Точно так и есть как вы сказали. Получается в такой ситуации вариантов никаких?
0
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
18.03.2013, 10:59 4
а изменить тип данных в этом столбце на строковый никак?
0
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
18.03.2013, 10:59  [ТС] 5
Просто ситуация какая, создатели БД сделали так, что вместо интовых ID записей, используются бинарники. Та таблица, в которую производится вставка создана мной лично. Чтобы использовать join к ней других таблиц можно сравнивать бинарники сконвертировав их в varchar, тогда и проблем со вставкой нет - можно заливать как текст, но, нет ли здесь каких либо подводных камней при таком обращении с бинарными записями? Если вопрос кому-то покажется нубским, уж извините, опыт работы с БД небольшой пока)
0
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
18.03.2013, 11:03 6
а если перед экспортом данных на сервер конвертировать данные проблемного столбца в массив байт? Просто код изменится, зато структура таблицы БД будет как надо.
Хотя это тоже некрасиво выходит: так код совсем крохотный, а с конвертированием вырастет порядком
1
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
18.03.2013, 11:07  [ТС] 7
Видно ничего другого не остается, хотелось конечно обойтись без циклов, вставляя строки всем скопом, но наверное на времени обработки это не отразится. Спасибо за помощь!
0
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
18.03.2013, 11:13 8
ну вот ты заполнил DataAdapter данными из экселя. Только теперь начинай конвертацию. Тогда действительно особо не потеряешь времени. А то если будешь поштучно вытаскивать данные из ячеек, то тогда да - время обработки сильно возрасти может. Хотя если таблица небольшая, то и разницы никакой.
ИМХО, разрабы БД не предполагали, что кому-то понадобится автоматом из экселя данные сливать, вот и замутили такое со структурой таблиц БД.
0
Заблокирован
20.03.2013, 15:58 9
Kruds, Покажи базу данных, проект и сам файл с которого читаешь.
0
16 / 12 / 4
Регистрация: 28.09.2015
Сообщений: 278
30.05.2017, 13:50 10
как решили проблему?
0
1159 / 945 / 154
Регистрация: 25.07.2015
Сообщений: 2,103
30.05.2017, 19:58 11
Цитата Сообщение от kyvaldenius Посмотреть сообщение
как решили проблему?
Вопрос риторический )))
Её другим способом, кроме как конвертацией данных , о котором писал выше Юпатов Дмитрий,
никак не решишь. Или менять тип столбца в БД.
0
16 / 12 / 4
Регистрация: 28.09.2015
Сообщений: 278
02.06.2017, 10:02 12
ну на всякий случай напишу ( вдруг кому понадобиться )
я мучася с date и numeric

Данное значение типа String из источника данных не может быть преобразовано в тип date/numeric указанного столбца назначения."

1) менять в БД поле на тип String - но потом проблем много
2) С датой. В exele точно должна быть дата а не String (дата и числа привязаны к правой границе а текст к левой )
у меня было так что в exel после сцеплений ячеек я получал дату вида 01.02.2014 но она считалась как текст пришлось счеплять ячейки и получать результат в виде числа (количество часов от начала отсчета даты или как то так ) а потом это число в ячейке делать "формат дата" тогда все норм
3) numeric в exel 2255.22 должна быть 2255,22 или на оборот уже не помню , короче прикол с "," и "."
0
02.06.2017, 10:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2017, 10:02
Помогаю со студенческими работами здесь

несовпадение типов данных
подскажите пожалуйста, как обозначить вводимую через InputBox переменную (допустим N), чтобы ее...

Несовпадение типов данных
Господа! Есть проблема. (VB5, MS Access 97) Когда делаю SELECT * ... WHERE Number=x... (Поле...

Несовпадение типов при фильтрации
Выполняю фильтрацию по полю id_населенный пункт DataModule3.ADOTable7.Filter:='Id_НаселенныйПункт...

Несовпадение типов при проверки ячейки в теле цикла
Дорогие форумчане.. застрял при написании макроса на следующей ерунде и не могу понять от куда ноги...


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

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