|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
приветствую! подскажите возможно ли в C# использовать для передачи в таблицу MS SQL Server данных из DataTable целиком, конструкцию: Код: c# 1. 2. 3. 4. 5.
или Код: c# 1. 2. 3. 4. 5. 6. 7.
Модератор: Учимся использовать тэги оформления кода - FAQ может такой реализации совсем нет в C#? подскажите метод или есть примеры синтаксиса? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:40 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127приветствую! подскажите возможно ли в C# использовать для передачи в таблицу MS SQL Server данных из DataTable целиком, Можно - используя user-defined table type (который нужно создать на сервере). Но в даннум случае нужно использовать, как было написано выше, SqlBulkCopy. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 17:04 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
Konst_One, В примере предполагается, что наша DataTable имеет ту же схему, что и целевая Таблица. Мне надо передать в MS SQL данные не имеющую в приемнике таблицу. В этом и вопрос, есть ли инструмент использующий возможность команды sql Код: sql 1.
в help msdn говориться, что sqlbulkcopy может передать на сервер в таблицу tempdb, но как не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 12:05 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127в help msdn говориться, что sqlbulkcopy может передать на сервер в таблицу tempdb, но как не понятно. Обычная временная таблица в одном соединении с bulk copy: Код: c# 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.
Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 13:14 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, это тоже решение с имеющейся на сервере созданной таблицы с известным форматом данных, а у меня приходит таблица с чем-то, не известно размер и количественный с качественным содержанием в dbf от fox. я все умудряюсь драйвером от fox в datatable запихать данные и ищу способ затащить все в БД на ms sql server 2017 из C#. смущает что не работает sql команда Код: sql 1.
, где не надо знать, что тащишь в БД. в SqlBulkCopy пока вижу, что нужна хоть убей таблица приемник со всеми известными. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 17:00 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127смущает что не работает sql команда Код: sql 1.
, где не надо знать, что тащишь в БД. в SqlBulkCopy пока вижу, что нужна хоть убей таблица приемник со всеми известными. С какого это перепугу не надо знать? У select into есть секция from, где указывается источник данных, метаданные которого прекрасно известны серверу, и он их в точности копирует в создаваемую таблицу. Без метаданных это в принципе не получится. sibir127это тоже решение с имеющейся на сервере созданной таблицы с известным форматом данных, а у меня приходит таблица с чем-то, не известно размер и количественный с качественным содержанием в dbf от fox. я все умудряюсь драйвером от fox в datatable запихать данные и ищу способ затащить все в БД на ms sql server 2017 из C#. 1. Это временная таблица. Она имеется на сервере только в вашей сессии. 2. Есть DataTable - значит, метаданные получить можно. Разбирайте коллекцию Columns, генерите скрипт создания временной или постоянной таблицы (хотя за создание постоянных объектов базы в прикладном коде я бы отправлял подметать улицы), дальше - как было описано выше. Поиск в гугле по sqlbulkcopy create destination table в первой же ссылке выдает именно такое решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 17:56 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, СПАСИБО, хорошая идея гуглить на англоязычных ресурсах, на русском перечитываю одни и те же примеры, не рабочие. Код: c# 1. 2. 3.
подскажи, а у datatable по умолчанию имя не присваивается служебное, я именовал сам так как в коде получал пустое имя. столкнулся с проблемой выделения памяти, при копировании загруженной таблицы в 300 метров памяти не хватило. авторНеобработанное исключение типа "System.OutOfMemoryException" в System.Data.dll подскажи материал по обработке больших файлов, в идеале загрузить таблицу в 1,2 гига. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2018, 10:15 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
1. Передавать сразу всю таблицу можно. Ознакомьтесь с табличными параметрами MS SQL и их поддержкой в C# 2. Передавать много данных через этот механизм нельзя. Это просто нелепо. Для массовых загрузок используется соответствующий механизм, например SqlBulkCopy ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2018, 10:29 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127, для заливки больших объемов лучше всего сделать свою (специально заточенную) имплементацию IDataReader (ну и использовать SqlBulkCopy.WriteToServer(IDataReader)) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2018, 10:53 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127подскажи материал по обработке больших файлов, в идеале загрузить таблицу в 1,2 гига. DataTable.CreateDataReader + SqlBulkCopy.WriteToServer(IDataReader) Или сразу передавать в SqlBulkCopy.WriteToServer тот датаридер, которым формируется DataTable (и DataTable в этом случае вообще не нужна). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2018, 11:29 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, приветствую, не смог побороть загрузку из datareader вот код, использую два подключения одно на dbf файл, другое в ms sql server, но не получается запустить sqlblkcopy(datareader). убрал закрытие коннекта к dbf файлу, но дальше эксперимент встал, как вкопанный. все останавливается на строке с коментарием //Недопустимая попытка вызвать FieldCount при закрытом устройстве чтения. или Недопустимая попытка вызвать GetSchemaTable при закрытом устройстве чтения.//????? видимо я недопонимаю логики работы с datareader( Код: c# 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2018, 14:56 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
table - что это такое у вас за объект? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2018, 15:00 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
сделайте нормальные методы с передачей всех нужных параметров, а то вообще непонятно, что вы там делаете, какой-то дельфи-стайл с кнопками и глобальными переменными ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2018, 15:03 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127, Код: c# 1. 2.
Вероятней всего, после этого, sqlReader - "закрытое устройство чтения" (обычно Reader-ы "forward only", без "reset init state") P.S. Это если пользователь-обезьянка нажимает сначала button1, а затем button2 и button3... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2018, 22:16 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
LR, Приветствую! То есть вопрос не во втором подключении к sql приёмнику, я думал проблема в двойном подключении сразу и к dbf и sql, а реадер один выбирает и он же отдает. И он где то закрывается перед выгрузкой данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 10:27 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127где то закрывается The Visual Studio debugger helps you observe the run-time behavior of your program and find problems. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 11:00 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
LR, Спасибо, да закрытие нашел. У Вас есть пример импорта таблицы из reader, не могу найти решение. из datatable получается при создании в приемнике структуры таблицы, но с sqlbulkcopy из datareader построить не получается. Если создаю datatable то Вы мне показали, что datareader тут-же закрывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 13:48 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127, Сон Веры ПавловныИли сразу передавать в SqlBulkCopy.WriteToServer тот датаридер, которым формируется DataTable (и DataTable в этом случае вообще не нужна). т.е., так пробовали? Код: c# 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 14:05 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
LR, да, создаю новое соединение передаю в sqlbulkcopy, но при указании table.TableName(здесь имя таблицы), ругается, что нет доступа к таблице приемнику. Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 15:04 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127, Ну, т.е., таблицы в БД наверное нет? Тогда можно использовать OleDbDataReader.GetSchemaTable() для создания таблицы "в приемнике". Можно, конечно, и так "коряво" как Вы делали (с предварительной заливкой данных в DataTable), но тогда открывайте два DataReader-а, один для создания DataTable, второй - для SqlBulkCopy. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 16:30 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127, а почему бы один раз не сделать необходимую(ые) таблицу(ы) "в приемнике" и не мучиться проверкой/созданием? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 16:40 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
LR, Коряво, ))) потому что реализация планировалась через datatable, пока не познакомился с datareader, а при пришедшем файле более 300 Мб все это тоже развалилось, не хватает памяти. тут послали меня на SqlBulkCopy и вот побороть самостоятельно не выходит, все примеры не содержат полную реализацию, самую простую, все примеры не рабочие. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 21:45 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
sibir127и вот побороть самостоятельно не выходит, все примеры не содержат полную реализацию, самую простую, все примеры не рабочие. Ну это только так кажется. Не поддавайтесь унынию (уныние - величайший из грехов, лучше кого-нибудь убить чем унывать). Еще раз спрошу, почему Вы не хотите создать таблицу-приемник "вручную", один раз, и затем не иметь никаких проблем с SqlBulkCopy? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2018, 00:38 |
|
в MS SQL из C#
|
|||
---|---|---|---|
#18+
LR, Причина во вредности характера, мне ткнули здесь, что делается это элементарно через "ленивую загрузку", а по жизни выяснилось, что руки у всех разные и при достигнутой договорённости формат и содержание в самый неподходящий момент оказываются отличными от первоначальных. решил что нужно это теперь узнать и сделать, а то спать не буду) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2018, 07:53 |
|
|
start [/forum/topic.php?fid=20&msg=39660555&tid=1399329]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
89ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 226ms |
0 / 0 |