|
TVP и Excel
|
|||
---|---|---|---|
#18+
Никогда раньше не приходилось особо сталкиваться с макросами в Офисе, посему не знаю даже с какой стороны подойти Есть книга Excel, нужно взять данные с одного листа(допустим, Лист2), передать их в хранимую процедуру MSSQL и результатами выполнения заполнить некую таблицу на листе1. Хранимая процедура принимает параметром TVP(nvarchar, int, int) Вопрос - как это сделать? Единственная мысль пока которая пришла - создать ADODB.Recordset нужной структуры, заполнить его, и передать как параметр для ADODB.Command, но как понимаю это не катит (во всяком случае, тип параметра adUserDefined не прокатывает) Посоветуйте, в какую сторону смотреть.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 16:49 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
guest_не_люблю_vbaв какую сторону смотреть..В MSSQL есть возможность импортировать данные из файла Эксель, может туда посмотреть? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 16:52 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
В MSSQL есть возможность импортировать данные из файла Эксель, может туда посмотреть? Не, тут просто отчёт построить, в мсскл эти данные и не нужны как бы) Проще тогда написать формочку какую нибудь, чтобы открывала книгу экселя, брала данные, сама запрашивала сервер и заполняла бы этот отчёт. Но хотелось бы сделать это прямо из самой книги, без внешних приблуд. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 17:09 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
А, прошу прощения, я неправильно прочитал задачу. guest_не_люблю_vbaсоздать ADODB.Recordset нужной структуры, заполнить его, и передать как параметр для ADODB.Commandнет, у ADODB.Command есть коллекция Parameters - ее и нужно заполнить параметрами ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 17:17 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
А можно, если не сильно привередничать просто выполнить из коннекшна команду: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 17:19 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
Shocker.Pro, это если бы процедура принимала несколько скалярных параметров, а она принимает один табличный, поэтому и была мысль заполнить Recordset и попробовать засунуть его как параметр, в общем - мне надо аналог адонетовского SqlDbType.Structured) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 17:38 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
Через ADO вроде бы нельзя передать табличный параметр. Сериализация или последовательные запросы... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 17:42 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
Можно еще открыть рекордсет по записи и занести в него все на стороне клиента. Правда, по сути, это все равно превратится в последовательность запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 17:44 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
Жаль.. тогда похоже остаётся крайний случай - формировать XML, и сделать обёртку с помощью sp_xml_preparedocument, наверное, только так ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 17:49 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
guest_не_люблю_vbaЖаль.. тогда похоже остаётся крайний случай - формировать XML, и сделать обёртку с помощью sp_xml_preparedocument, наверное, только такОстается ещё случай заполнить "из excel" (временную)таблицу на сревере и скормить её процедуре в качестве параметра. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2012, 18:33 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
Сам недавно решал подобную проблему для своей новой системы(Excel - SQL Server). В результате продолжительных поисков и исследований, пришёл к выводу, что передачу tvp из Excel в хранимку лучше всего реализовывать через dll. Последовательность получилась такая: Посредством ADO подключение к книге Excel(в моём случае - открытой) Заполнение объекта Table данными Посредством ADO.NET подключение к SQL Server Передача объекта Table в хранимую процедуру как параметр Быстродействие такого решения оказалось сопоставимо с XML на уровне погрешности, а внедрение в проект - на несколько порядков проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2012, 01:43 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
ElenHim, Но необходимо наличие нетфреймворка на клиенте. Если эта программа для себя, то не страшно, но усложняется дистрибуция. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2012, 11:02 |
|
TVP и Excel
|
|||
---|---|---|---|
#18+
Shocker.Pro, Это так. Но не стоит забывать, что framework бесплатен, поэтому проблема дистрибуции решается малой кровью. В моём случае, у половины пользователей фреймворк уже был установлен, остальным - дали указание IT отделу установить. В конечном счёте всё зависит от критичности использования tvp. На последок, пара ссылок Arrays and Lists in SQL Server 2008 Using Table-Valued Parameters Arrays and Lists in SQL Server 2005 and Beyond When TVPs Do Not Cut it PS Вообще, имхо, стоит заморочиться с фреймворком, т.к. MS активно продвигают .NET и задвигают VB. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2012, 12:55 |
|
|
start [/forum/topic.php?fid=61&fpage=100&tid=2175670]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 319ms |
total: | 455ms |
0 / 0 |