Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Допусти есть DataSet, в нем таблица, над таблицей производятся некоторые действия, т.е. вставление новых строк, редактирование существующих и удаление строк. Задача: нужно с помощью хранимой процедуры(очевидно для каждого действия своей) внести изменения в базу данных на SQL Server. Т.е. изменения вносятся не каждый раз при изменении данных в DataSet, а по нажатию кнопки ОК все изменения заносятся в базу. Каким образом это делается? Пока я думаю применить следующую структуру: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2004, 16:32 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
ну так сконфигурируйте SQLAdapter так, как вам нужно. У него есть метод Update, который и зафиксирует все изменения в датасете. А при настройке SQLAdapter'а как раз есть возможность выбора хранимых процедур (или создания новых) для чтения/изменения/удаления/вставки записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2004, 16:43 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Т.е. для каждой операции нужно сконфигурировать DataAdapter, так я понял? И скажем для операции апдейт он сразу передаст все все строки на SQL север? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2004, 17:09 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
В общем виде так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2004, 17:18 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Спасибо, понятно. А что если таблиц в DataSet несколько, и передавать данные нужно в определенном порядке, в соответствии со связями в базе данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2004, 17:51 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
dencatСпасибо, понятно. А что если таблиц в DataSet несколько, и передавать данные нужно в определенном порядке, в соответствии со связями в базе данных? Значит и надо писать ХП на внесение изменений в несколько таблиц. Кстате в адаптере надо не забыть прописать TableMappings, а то всё это хозяйство работать не будет. Вообще, по первому разу сильно помогает анализ кода мастера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2004, 09:58 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Таблиц всего 18, т.е. для каждой нужно писать процедуры на вставку, удаление и обнавление строк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2004, 11:32 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
ХП надо писать одну на изменение данных во всех таблицах, которых касается это изменение. Изменение имеется ввиду однократное. Соответствующие изменения в связанных таблицах можно вызвать и триггерами. Например если есть три взаимосвязанные таблицы Т1, Т2 и Т3 и в Т2 и Т3 должны измениться данные в зависимости от изменения данных в Т1, то на сервере надо написать ХП, которая в зависимости от параметров, переданных для изменения Т1, соответственно изменит Т2 и Т3. Или написать процедуру для изменения данных только в Т1, а для Т1 написать триггер, который изменяет данные в Т2 и Т3. Вообще всё это очень привязано к конкретной задаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2004, 12:05 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Чего-то у меня непонимание какое-то. Есть, допустим одна таблица, TeloTbl(столбцы Teloid,FIO,City). Код следующий: Код: plaintext 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. Данные в DataGrid dgTelo изменяются(т.е. удаляются,вставляются, изменяются).В базу изменения передаются по нажатии на кнопку: Код: plaintext 1. 2. 3. 4. 5. 6. Допустим я имею в БД на SQL Server несколько таблиц, связанных между собой отношениями.Надо ли для каждой таблицы писать свои три процедуры и описывать все параметры в коде, выбирая очередность обновлений с помощью конструкции Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 14:17 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
иногда лучше написать одну XП, на вход которой передаешь строку (или 3 строки на insert/update/delete) с XML-документом, полученным DataSet.GetChanges(...).WriteXml(...) и пусть ХП заботится о порядке внесения измений по таблицам. --- зависит от возможностей SQL сервера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 14:29 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Код: plaintext Кстати перед методом Fill не надо открывать соединение и соответственно закрывать его после. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 14:35 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Спасибо, будем разбираться далее:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 14:48 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Еще вопрос, а в каком порядке в случае конструкции Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 14:56 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
dencat А у вас связи между таблицами в датасете настроены? Может, адаптер их использует для определения порядка обновления. Хотя все это чисто догадки и проще почитать мсдн или попробовать :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 15:04 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
ИЗ МСДН-на. Это то, что надо? When an application calls the Update method, the DbDataAdapter examines the RowState property, and executes the required INSERT, UPDATE, or DELETE statements iteratively for each row, based on the order of the indexes configured in the DataSet. For example, Update might execute a DELETE statement, followed by an INSERT statement, and then another DELETE statement, due to the ordering of the rows in the DataTable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 15:08 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Нда, недочитал, как обычно. :) Дальше написано следующее: It should be noted that these statements are not performed as a batch process; each row is updated individually. An application can call the GetChanges method in situations where you must control the sequence of statement types (for example, INSERTs before UPDATEs). For more information, see Updating the Database with a DataAdapter and the DataSet. Так что похоже рулить если что надо ручками. ms-help://MS.MSDNQTR.2004JUL.1033/cpref/html/frlrfsystemdatacommondbdataadapterclassupdatetopic2.htm По моему это все только касаемо одной таблицы, хотя эта версия метода Update принимает в качестве параметра DataSet. Странно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 15:12 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Во, подтверждение, что порядок обновления надо контролировать самому: Ordering of Inserts, Updates, and Deletes In many circumstances, the order in which changes made through the DataSet are sent to the data source is important. For example, if a primary key value for an existing row is updated, and a new row has been added with the new primary key value, it is important to process the update before the insert. You can use the Select method of the DataTable to return a DataRow array that only references rows with a particular RowState. You can then pass the returned DataRow array to the Update method of the DataAdapter to process the modified rows. By specifying a subset of rows to be updated, you can control the order in which inserts, updates, and deletes are processed. ms-help://MS.MSDNQTR.2004JUL.1033/cpguide/html/cpconUpdatingDatabaseWithDataAdapterDataSet.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 15:20 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Еще вопрос, а в каком порядке в случае конструкции daTest.Update(dsTest) выполняются запросы INSERT,DELETE,UPDATE к базе данных, и можно ли их очередностью как то рулить? Рулить нужно самому исходя из логики своего приложения, осуществляется это либо через метод DataSet.GetChanges, либо через DataTable.Select. Либо вручную без использования DataAdapter. Универсальных рецептов думаю что нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 15:33 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Спасибо. Ага я понимаю, что нужно "You can use the Select method of the DataTable to return a DataRow array that only references rows with a particular RowState." , собственно у меня это в коде выше так и написано. Код: plaintext 1. 2. 3. Но тогда получается что для каждой таблицы нужно писать три процедуры, на INSERT, DELETE и UPDATE, ведь количество параметров разное? Допустим у меня есть хранимая процедура: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 15:48 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Или задавать параметрам в ХП значения по умолчани? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 15:52 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
И можно ли в самой хранимой процедуре делать выбор - если параметр есть, производим обнавление, если параметра нет то для этой таблицы UPDATE не выпоняется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 16:52 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Параметр в хп не может быть "есть" или "нет" он всегда есть меняться может его значение. какие значения подставляет ado в параметры - это надо попробовать. скорее всего просто значения из полей вставляет в параметры. так что что-бы узнать, изменились они или нет, придется еще и запрос в таблицу делать для сравнения значений полей на сервере со значениями параметров. а оно надо так нагромождать? а выбор в хп делать конечно же можно. if же там есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 16:59 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Тяжко что-либо сказать, не зная логики - что можно и что нельзя Навскидку: В датасет можно вытащить не таблицы, а вью, в котором собрать в кучу все столбцы, данные которых надо вывести/обновить ит.д., тогда и команда на операцию будет одна - только на это вью. Правда далеко не всегда вью бывает обновляемым. Если не проходит какая либо операция и сервер молчит, ИМХО лучше посмотреть Profiler. Там видно какие команды отправляются на сервер и с какими параметрами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 17:03 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
dencatИ можно ли в самой хранимой процедуре делать выбор - если параметр есть, производим обнавление, если параметра нет то для этой таблицы UPDATE не выпоняется? Можно, задав знечение по умолчанию, а потом if default то не выполняется, есле не default, то выполняется. PS как бы нас сейчас не выкинули в SQL server ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 17:08 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Мммм, ну ни как я не въеду саму концепцию, очевидно. Есть следующий код, и он работает: Код: plaintext 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. Хранимая утилита например для INSERT такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Как альтернатива иметь несколько процедур для каждой операции, но тогда придется менять параметр Код: plaintext 1. Как все таки правильно?Извините за натойчивость и сумбур, но это мой первый проект, так что пытаюсь разобраться:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2004, 16:18 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Я так понимаю, что если у меня около 15 таблиц в DataSet, и я хочу иметь всего три процедуры, по одной на каждую операцию(INSERT,UPDATE,DELETE) обновления данных в базе на SQL сервере я должен буду, вопервых для того же daTest.InsertCommand описать кучу параметров, а в самой хранимой процедуре указать все эти параметры В этом может помочь мастер VS.NET - описать и сгенерировать необходимые процедуры, которые за тем можно подправить. Существуют еще различные генераторы формирования ХП, и DataAdapter. Вручную заниматься вводом параметров правильно настроенного DataAdapter тоже нет необходимости, данные должны подставляться автоматически на основе обновляемой строки. И здесь также есть различные сторонние генераторы формирующие DataAdapter на основе схемы таблицы. и перед каждым оператором INSERT делать проверку, есть такие параметры, т.е. есть ли строки на вставление или нет. Так? Считаю полезным явно определять при помощи DataSet.GetChanges , или DataTable.Select . Те изменения которые произошли в DataSet. Пример использования DataSet.GetChanges опять же можно получить при помощи мастера VS.NET, DataTable.Select используют, например при Insert когда необходимо обновить текущий DataSet получаемыми значениями Identity. Как альтернатива иметь несколько процедур для каждой операции, но тогда придется менять параметр Код: plaintext 1. 2. Обычно используется несколько "заточенных" экземпляров класса DataAdapter для каждой таблицы. Таким образом ничего менять не приходится. Либо создавать и настраивать свой DataAdapter в нужном месте, но если пойти таким путем то ИМХО вообще DataAdapter не нужен, создаем и настраиваем Command вручную, передаем параметры на основе строки и запускаем ХП на выполнение. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 07:59 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Спасибо за развернутый ответ:) А пятнадцать DataAdapter для 15 таблиц это не слишком? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 12:19 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
не слишком :-) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 12:28 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Значит так, пока я сделал следующее. Есть тестовая база, две таблицы TeloTbl(Teloid(Primary key),fio,city) и CityTbl(CityId(Primary key)),связаны отношением один ко многим, т.е. CityTbl фактически справочник городов для TeloTbl. Код следующий: Код: plaintext 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. Код: plaintext 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. Вроде все работает, такую же схему хочу применить и к большой базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 14:18 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Вроде все работает, такую же схему хочу применить и к большой базе. Попробуйте, принципиально плохого ничего не увидел. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 14:26 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Спасибо:), единственное, что меня смущает, так это количество параметров для каждой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 14:33 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
единственное, что меня смущает, так это количество параметров для каждой процедуры. Это разве много? :-) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 14:34 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Да нет, это то не много, но в реальном DataSet около 15 таблиц по 5 -6 столбцов примерно. Итого очень приблизительно порядка 50 параметров для каждой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 15:02 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Да нет, это то не много, но в реальном DataSet около 15 таблиц по 5 -6 столбцов примерно. Итого очень приблизительно порядка 50 параметров для каждой процедуры. Не понял как получается порядка 50 параметров? Если в таблицах по 5-6 столбцов примерно. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 17:23 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Принципиально плохо (ИМХО) - dbo.spDeleteTelo, dbo.spInsertTelo - а флаг в процедуре завести слабо - типа 1 - удаление, 2, добавление и т.п. Таблица одна. Более того, количество параметров тогда одинаково в процедуре и задаётся в отдельной функции для всех команд абсолютно одинаково. Разница только в значениях параметров. Кода таким образом становится меньше. 2 sa Считаю полезным явно определять при помощи DataSet.GetChanges, или DataTable.Select. Те изменения которые произошли в DataSet Полезно, но не всегда необходимо. Зачастую не использую совсем. Идентити новой записи получаю через выходной параметр ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:24 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Пока для UPDATE получается такая процедура, 60 параметров:( Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:21 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Пока для UPDATE получается такая процедура, 60 параметров:( Вообще то такую штуку я и не предполагал :-) Почему не хотите сделать отдельные процедуры для каждой таблицы|DataAdapter'а? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 21:49 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Т.е. для каждой таблицы будет три процедуры UPDATE,DELETE и INSERT, и соответственно свой DataAdapter, к которым всеравно придется описывать все эти же параметры, помоему получится даже более громоздко, или нет? Или можно описать все параметры, а потом перед обновлением изменять параметр CommandText, т.е. что нибудь типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 23:19 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Т.е. для каждой таблицы будет три процедуры UPDATE,DELETE и INSERT, и соответственно свой DataAdapter, к которым всеравно придется описывать все эти же параметры, помоему получится даже более громоздко, или нет? Думаю это правильно с логической и функциональной точки зрения. Хотя трудно что то советовать не зная предметную область и постановку задачи. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 23:49 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
После продолжительного обсуждения, у меня сложилось собственное мнение, но вопросов не поубавилось. Отдельное спасибо Hummer за идею создавать параметры в отдельной процедуре, и Sa за развернутые ответы:) Итак, что имеем. Тестовая база состаящая из двух таблиц,TeloTbl(Teloid(Primary key),fio,city) и CityTbl(CityId(Primary key)),связаны отношением один ко многим, т.е. CityTbl фактически справочник городов для TeloTbl и следующий работающий код: Код: plaintext 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. Код: plaintext 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. 1. При использовании варианта, который сделан в тестовой базе, придется сделать три хранимых процедуры с одинаковым числом параметров, коих около 80.На чем это может отражаться кроме гомоздкости кода хранимых процедур? 2.Вариант второй. На каждую таблицу по три "своих" ХП.Тогда придется описывать теже 80 параметров плюс переодически менять параметр CommandText для Command. 3.Вариант третий. Использовать для каждой таблицы сврй DataAdapter, тоже помоему слишком громоздко. Следует учесть, что в реальной базе все эти обновления должны происходить вместе, т.е. пользователь открыл данные по определенной фирме, далее он чтото меняет в них, затем нажимает кнопку ОК и происходит запись _всех_ внесенных изменений в базу. Может быть кто-то сталкивался с проектами в которых нужно было одномоментно вносить изменения в большое количество таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 15:49 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Одномоментно в 15 таблиц вносить изменения - что имеем: либо неправильная структура БД, либо слишком перегруженная информацией карточка на изменение БД - т.е. прям представил форму, на которой инфа из 15 таблиц и вся меняется:) Можно дальше пойти, всю БД на такую форму запихнуть. Модифицируйте вариант 2 - на каждую табличку 1 процедура с флагом, по которому в процедуре определям, удалять, изменять или добавлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 16:42 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Итак продолжим :), по совету уважаемого Hummer, модифицировал вариант два из своего предыдущего поста. Плюсы в данном варианте вижу следующие: 1. Объект Command один на каждую хранимую процедуру(таблицу). 2. Соответственно параметры создаются только один раз для данной команды. Минусы: 1. Помоему слишком громоздко выглядит кусок кода отвечающий непосредственно за отправку обновлений на SQL Server. Код: plaintext 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. Код: plaintext 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. Скорее всего карточка и правда перегружена, но сильно не бейте , ибо это мой первый проект :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 13:38 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
Более модифицированнный вариант. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 15:15 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
dencatА на форме инфа действительно из 15 таблиц, а то что меняется все сразу естественно предельный вариант, на самом деле меняться будет одна - три таблицы за раз. Скорее всего карточка и правда перегружена, но сильно не бейте , ибо это мой первый проект :) Всё равно не пойму. Неужели нельзя сгруппировать информацию в таблицах по какому-либо признаку и разделить эту дикую форму на несколько, открывающихся друг из друга, например, по кнопке ? Можно на одной форме наложить несколько вкладок и раскидать инфу по ним. Опять же, ведь таблицы имеют между собой какие-то отношения ? Почему, например в ХП не сделать join между соотносящимися таблицами и менять/добавлять/удалять связанные данные на основании данных какой-либо одной ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 16:53 |
|
||
|
Вопрос по внесению изменений в базу SQL Server.
|
|||
|---|---|---|---|
|
#18+
не по теме - зато про войну... вместо этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. можно просто: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2004, 17:59 |
|
||
|
|

start [/forum/topic.php?all=1&fid=20&tid=1438358]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 359ms |

| 0 / 0 |
