powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по внесению изменений в базу SQL Server.
25 сообщений из 45, страница 1 из 2
Вопрос по внесению изменений в базу SQL Server.
    #32681812
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допусти есть 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.
Public Shared Sub GetChange(ByVal tabName As String)

        Dim i As Integer
        Dim myCount As Integer

        myCount = CompanyForm.dsCompany.Tables(tabName).Rows.Count -  1 

        For i =  0  To myCount

            Select Case CompanyForm.dsCompany.Tables(tabName).Rows(i).RowState

                 'Обрабатываем удаленные записи 
            Case DataRowState.Deleted
                    teloid = CompanyForm.dsCompany.Tables(tabName).Rows(i).Item("CompanyContragentId", DataRowVersion.Original) 
 '...Вызываем процедуру для удаления строки в качестве параметра передаем значение teloid 

                     'Обрабатываем измененные записи. 
                Case DataRowState.Modified
                    teloid = CompanyForm.dsCompany.Tables(tabName).Rows(i).Item("CompanyContragentId", DataRowVersion.Original) 
 '...Вызываем процедуру для редактирования строки в качестве параметра передаем значение teloid 

                     'Обрабатываем добавленные записи. 
                Case DataRowState.Added
  '...Вызываем процедуру для добавления новой строки  
            End Select
        Next i

    End Sub
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32681844
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так сконфигурируйте SQLAdapter так, как вам нужно. У него есть метод Update, который и зафиксирует все изменения в датасете. А при настройке SQLAdapter'а как раз есть возможность выбора хранимых процедур (или создания новых) для чтения/изменения/удаления/вставки записей.
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32681927
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. для каждой операции нужно сконфигурировать DataAdapter, так я понял?
И скажем для операции апдейт он сразу передаст все все строки на SQL север?
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32681953
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем виде так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
dim da as sqldataadapter = new sqldataadapter
dim cmdSel as SQLcommand = new SQLcommand 
dim cmdDel as SQLcommand = new SQLcommand 
dim cmdUpd as SQLcommand = new SQLcommand 
dim cmdIns as SQLcommand = new SQLcommand 

cmdSel.commandtype=commandtype.storedProcedure
cmdSel.CommandText = "имя ХП для отбора"
параметры, соединение.....

cmdSel.commandtype=commandtype.storedProcedure
cmdDel.CommandText = "имя ХП для удаления"
параметры, соединение.......
..................
то же для обновления и вставки


da.SelectCommand=cmdSel
da.DeleteCommand=cmdDel
da.UpdateCommand=cmdUpd
da.InsertCommand=cmdIns
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32682054
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, понятно.
А что если таблиц в DataSet несколько, и передавать данные нужно в определенном порядке, в соответствии со связями в базе данных?
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32682547
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dencatСпасибо, понятно.
А что если таблиц в DataSet несколько, и передавать данные нужно в определенном порядке, в соответствии со связями в базе данных?

Значит и надо писать ХП на внесение изменений в несколько таблиц. Кстате в адаптере надо не забыть прописать TableMappings, а то всё это хозяйство работать не будет. Вообще, по первому разу сильно помогает анализ кода мастера.
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32682788
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблиц всего 18, т.е. для каждой нужно писать процедуры на вставку, удаление и обнавление строк?
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32682921
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХП надо писать одну на изменение данных во всех таблицах, которых касается это изменение. Изменение имеется ввиду однократное. Соответствующие изменения в связанных таблицах можно вызвать и триггерами.

Например если есть три взаимосвязанные таблицы Т1, Т2 и Т3 и в Т2 и Т3 должны измениться данные в зависимости от изменения данных в Т1, то на сервере надо написать ХП, которая в зависимости от параметров, переданных для изменения Т1, соответственно изменит Т2 и Т3. Или написать процедуру для изменения данных только в Т1, а для Т1 написать триггер, который изменяет данные в Т2 и Т3. Вообще всё это очень привязано к конкретной задаче.
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685395
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего-то у меня непонимание какое-то. Есть, допустим одна таблица, 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.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

         'Настройка команды SELECT 
        cmdSqlServerSelect.Connection = cnSqlServer
        cmdSqlServerSelect.CommandType = CommandType.StoredProcedure
        cmdSqlServerSelect.CommandText = "dbo.spSelect"
         '------------------------------------------------------------------ 

         'Настройка команды UPDATE 
        cmdSqlServerUpdate.Connection = cnSqlServer
        cmdSqlServerUpdate.CommandType = CommandType.StoredProcedure
        cmdSqlServerUpdate.CommandText = "dbo.spUpdateTelo"

        cmdSqlServerUpdate.Parameters.Add("@TeloId", SqlDbType.Int,  4 , "teloid")
        cmdSqlServerUpdate.Parameters("@TeloId").Direction = ParameterDirection.Input
        cmdSqlServerUpdate.Parameters("@TeloId").SourceVersion = DataRowVersion.Current

        cmdSqlServerUpdate.Parameters.Add("@City", SqlDbType.Char,  40 , "city")
        cmdSqlServerUpdate.Parameters("@City").Direction = ParameterDirection.Input
        cmdSqlServerUpdate.Parameters("@City").SourceVersion = DataRowVersion.Current

        cmdSqlServerUpdate.Parameters.Add("@FIO", SqlDbType.Char,  50 , "fio")
        cmdSqlServerUpdate.Parameters("@FIO").Direction = ParameterDirection.Input
        cmdSqlServerUpdate.Parameters("@FIO").SourceVersion = DataRowVersion.Current


         '-------------------------------------------------------------- 

         'Настройка команды DELETE 
        cmdSqlServerDelete.Connection = cnSqlServer
        cmdSqlServerDelete.CommandType = CommandType.StoredProcedure
        cmdSqlServerDelete.CommandText = "dbo.spDeleteTelo"

        cmdSqlServerDelete.Parameters.Add("@TeloId", SqlDbType.Int,  4 , "teloid")
        cmdSqlServerDelete.Parameters("@TeloId").Direction = ParameterDirection.Input
        cmdSqlServerDelete.Parameters("@TeloId").SourceVersion = DataRowVersion.Original

                '---------------------------------------------------------- 

         'Настройка команды INSERT 
        cmdSqlServerInsert.Connection = cnSqlServer
        cmdSqlServerInsert.CommandType = CommandType.StoredProcedure
        cmdSqlServerInsert.CommandText = "dbo.spInsertTelo"

        cmdSqlServerInsert.Parameters.Add("@City", SqlDbType.Char,  40 , "city")
        cmdSqlServerInsert.Parameters("@City").Direction = ParameterDirection.Input
         'cmdSqlServerInsert.Parameters("@City").SourceVersion = DataRowVersion.Original 
        
        cmdSqlServerInsert.Parameters.Add("@FIO", SqlDbType.Char,  50 , "fio")
        cmdSqlServerInsert.Parameters("@FIO").Direction = ParameterDirection.Input
         'cmdSqlServerInsert.Parameters("@FIO").SourceVersion = DataRowVersion.Original 

         '--------------------------------------------------------------------- 

        daTest.TableMappings.Add("Table", "TeloTbl")
        
        daTest.SelectCommand = cmdSqlServerSelect
        daTest.UpdateCommand = cmdSqlServerUpdate
        daTest.InsertCommand = cmdSqlServerInsert
        daTest.DeleteCommand = cmdSqlServerDelete


        cnSqlServer.Open()

        daTest.Fill(dsTest)

        dgTelo.DataSource = dsTest.Tables("TeloTbl")
       
        cnSqlServer.Close()

    End Sub


Данные в DataGrid dgTelo изменяются(т.е. удаляются,вставляются, изменяются).В базу изменения передаются по нажатии на кнопку:
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub bttnDelonServer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnDelonServer.Click

        daTest.Update(dsTest.Tables("TeloTbl").Select("", "", DataViewRowState.Deleted))
        daTest.Update(dsTest.Tables("TeloTbl").Select("", "", DataViewRowState.Added))
        daTest.Update(dsTest.Tables("TeloTbl").Select("", "", DataViewRowState.ModifiedCurrent))
    End Sub
Имеются соответственно три процедуры, для INSERT,UPDATE,DELETE которые получают параметры и работают непосредственно с базой. Все замечательно работает, но есть вопрос.
Допустим я имею в БД на SQL Server несколько таблиц, связанных между собой отношениями.Надо ли для каждой таблицы писать свои три процедуры и описывать все параметры в коде, выбирая очередность обновлений с помощью конструкции
Код: plaintext
1.
daTest.Update(dsTest.Tables(...).Select(...))
Или можно написать всего три процедуры для всех таблиц с кучей входящих параметров, расположив операторы SQL в нужном порядке, и вносить все обнавления сразу
Код: plaintext
1.
daTest.Update(dsTest)
Как вообще это делается правильно?В смысле передача обновления в БД с пощью хранимых процедур.
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685437
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
иногда лучше написать одну XП, на вход которой передаешь строку (или 3 строки на insert/update/delete) с XML-документом, полученным DataSet.GetChanges(...).WriteXml(...)
и пусть ХП заботится о порядке внесения измений по таблицам.
---
зависит от возможностей SQL сервера
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685454
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
Или можно написать всего три процедуры для всех таблиц с кучей входящих параметров, расположив операторы SQL в нужном порядке, и вносить все обнавления сразу
daTest.Update(dsTest)
Я именно так и делаю. Или пишу процедуру на все таблицы, которые это касается, или одну процедуру на одну таблицу, в которую непосредственно с клиента передаются параметры, а изменения в связанных таблицах вешаю на триггеры. Правда особенной кучи входных параметров у меня пока не получалось.

Код: plaintext
Как вообще это делается правильно?В смысле передача обновления в БД с пощью хранимых процедур
А на кой же они тогда ?


Кстати перед методом Fill не надо открывать соединение и соответственно закрывать его после.
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685479
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, будем разбираться далее:)
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685498
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопрос, а в каком порядке в случае конструкции
Код: plaintext
1.
daTest.Update(dsTest)
выполняются запросы INSERT,DELETE,UPDATE к базе данных, и можно ли их очередностью как то рулить?
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685513
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dencat
А у вас связи между таблицами в датасете настроены?
Может, адаптер их использует для определения порядка обновления.
Хотя все это чисто догадки и проще почитать мсдн или попробовать :))
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685521
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИЗ МСДН-на. Это то, что надо?

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.
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685529
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нда, недочитал, как обычно. :) Дальше написано следующее:

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. Странно.
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685543
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во, подтверждение, что порядок обновления надо контролировать самому:

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
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685583
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопрос, а в каком порядке в случае конструкции
daTest.Update(dsTest)
выполняются запросы INSERT,DELETE,UPDATE к базе данных, и можно ли их очередностью как то рулить?


Рулить нужно самому исходя из логики своего приложения, осуществляется это либо через метод DataSet.GetChanges, либо через DataTable.Select. Либо вручную без использования DataAdapter.

Универсальных рецептов думаю что нет.
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685639
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
Ага я понимаю, что нужно "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.
daTest.Update(dsTest.Tables("TeloTbl").Select("", "", DataViewRowState.Deleted))
        daTest.Update(dsTest.Tables("TeloTbl").Select("", "", DataViewRowState.Added))
        daTest.Update(dsTest.Tables("TeloTbl").Select("", "", DataViewRowState.ModifiedCurrent))

Но тогда получается что для каждой таблицы нужно писать три процедуры, на INSERT, DELETE и UPDATE, ведь количество параметров разное?
Допустим у меня есть хранимая процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
PROCEDURE dbo.spUpdateTelo
(@TeloId int,@FIO char( 50 ),@City char( 40 ),@CityId char,@CityIdold char)

AS
UPDATE dbo.CityTbl SET CityId=@CityId WHERE CityId=@CityIdold
UPDATE dbo.TeloTbl SET FIO=@FIO,City=@City WHERE TELOID=@TELOID
	RETURN 
Но обнавляется только таблица TeloTbl, CityTbl остается неизменной, будет ли ошибка при выполнении?
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685654
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или задавать параметрам в ХП значения по умолчани?
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685847
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И можно ли в самой хранимой процедуре делать выбор - если параметр есть, производим обнавление, если параметра нет то для этой таблицы UPDATE не выпоняется?
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685864
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Параметр в хп не может быть "есть" или "нет"
он всегда есть

меняться может его значение.
какие значения подставляет ado в параметры - это надо попробовать.
скорее всего просто значения из полей вставляет в параметры.
так что что-бы узнать, изменились они или нет, придется еще и запрос в таблицу делать для сравнения значений полей на сервере со значениями параметров. а оно надо так нагромождать?

а выбор в хп делать конечно же можно. if же там есть.
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685875
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тяжко что-либо сказать, не зная логики - что можно и что нельзя

Навскидку: В датасет можно вытащить не таблицы, а вью, в котором собрать в кучу все столбцы, данные которых надо вывести/обновить ит.д., тогда и команда на операцию будет одна - только на это вью. Правда далеко не всегда вью бывает обновляемым.
Если не проходит какая либо операция и сервер молчит, ИМХО лучше посмотреть Profiler. Там видно какие команды отправляются на сервер и с какими параметрами.
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32685889
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dencatИ можно ли в самой хранимой процедуре делать выбор - если параметр есть, производим обнавление, если параметра нет то для этой таблицы UPDATE не выпоняется?

Можно, задав знечение по умолчанию, а потом if default то не выполняется, есле не default, то выполняется.

PS как бы нас сейчас не выкинули в SQL server
...
Рейтинг: 0 / 0
Вопрос по внесению изменений в базу SQL Server.
    #32687948
dencat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мммм, ну ни как я не въеду саму концепцию, очевидно.

Есть следующий код, и он работает:
Код: 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.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

         'Настройка команды SELECT 
        cmdSqlServerSelect.Connection = cnSqlServer
        cmdSqlServerSelect.CommandType = CommandType.StoredProcedure
        cmdSqlServerSelect.CommandText = "dbo.spSelect"
         '------------------------------------------------------------------ 

         'Настройка команды UPDATE 
        cmdSqlServerUpdate.Connection = cnSqlServer
        cmdSqlServerUpdate.CommandType = CommandType.StoredProcedure
        cmdSqlServerUpdate.CommandText = "dbo.spUpdateTelo"

        cmdSqlServerUpdate.Parameters.Add("@TeloId", SqlDbType.Int,  4 , "teloid")
        cmdSqlServerUpdate.Parameters("@TeloId").Direction = ParameterDirection.Input
        cmdSqlServerUpdate.Parameters("@TeloId").SourceVersion = DataRowVersion.Current

        cmdSqlServerUpdate.Parameters.Add("@City", SqlDbType.Char,  40 , "city")
        cmdSqlServerUpdate.Parameters("@City").Direction = ParameterDirection.Input
        cmdSqlServerUpdate.Parameters("@City").SourceVersion = DataRowVersion.Current

        cmdSqlServerUpdate.Parameters.Add("@FIO", SqlDbType.Char,  50 , "fio")
        cmdSqlServerUpdate.Parameters("@FIO").Direction = ParameterDirection.Input
        cmdSqlServerUpdate.Parameters("@FIO").SourceVersion = DataRowVersion.Current

        cmdSqlServerUpdate.Parameters.Add("@CityId", SqlDbType.Char,  40 , "CityId")
        cmdSqlServerUpdate.Parameters("@CityId").Direction = ParameterDirection.Input
        cmdSqlServerUpdate.Parameters("@CityId").SourceVersion = DataRowVersion.Current

        cmdSqlServerUpdate.Parameters.Add("@CityIdold", SqlDbType.Char,  40 , "CityId")
        cmdSqlServerUpdate.Parameters("@CityId").Direction = ParameterDirection.Input
        cmdSqlServerUpdate.Parameters("@CityId").SourceVersion = DataRowVersion.Original

         '-------------------------------------------------------------- 

         'Настройка команды DELETE 
        cmdSqlServerDelete.Connection = cnSqlServer
        cmdSqlServerDelete.CommandType = CommandType.StoredProcedure
        cmdSqlServerDelete.CommandText = "dbo.spDeleteTelo"

        cmdSqlServerDelete.Parameters.Add("@TeloId", SqlDbType.Int,  4 , "teloid")
        cmdSqlServerDelete.Parameters("@TeloId").Direction = ParameterDirection.Input
        cmdSqlServerDelete.Parameters("@TeloId").SourceVersion = DataRowVersion.Original

        cmdSqlServerDelete.Parameters.Add("@CityId", SqlDbType.Char,  40 , "cityid")
        cmdSqlServerDelete.Parameters("@CityId").Direction = ParameterDirection.Input
        cmdSqlServerDelete.Parameters("@CityId").SourceVersion = DataRowVersion.Original
         '---------------------------------------------------------- 

         'Настройка команды INSERT 
        cmdSqlServerInsert.Connection = cnSqlServer
        cmdSqlServerInsert.CommandType = CommandType.StoredProcedure
        cmdSqlServerInsert.CommandText = "dbo.spInsertTelo"

        cmdSqlServerInsert.Parameters.Add("@City", SqlDbType.Char,  40 , "city")
        cmdSqlServerInsert.Parameters("@City").Direction = ParameterDirection.Input
         'cmdSqlServerInsert.Parameters("@City").SourceVersion = DataRowVersion.Current 

        cmdSqlServerInsert.Parameters.Add("@FIO", SqlDbType.Char,  50 , "fio")
        cmdSqlServerInsert.Parameters("@FIO").Direction = ParameterDirection.Input
         'cmdSqlServerInsert.Parameters("@FIO").SourceVersion = DataRowVersion.Current 

        cmdSqlServerInsert.Parameters.Add("@CityId", SqlDbType.Char,  40 , "cityid")
        cmdSqlServerInsert.Parameters("@CityId").Direction = ParameterDirection.Input
         'cmdSqlServerInsert.Parameters("@CityId").SourceVersion = DataRowVersion.Current 

         '--------------------------------------------------------------------- 

        daTest.TableMappings.Add("Table", "TeloTbl")
        daTest.TableMappings.Add("Table1", "CityTbl")

        daTest.SelectCommand = cmdSqlServerSelect
        daTest.UpdateCommand = cmdSqlServerUpdate
        daTest.InsertCommand = cmdSqlServerInsert
        daTest.DeleteCommand = cmdSqlServerDelete


        daTest.Fill(dsTest)

        dgTelo.DataSource = dsTest.Tables("TeloTbl")
        dgCity.DataSource = dsTest.Tables("CityTbl")

  End Sub
     'Функция создания строки подключения к серверу 
    Public Shared Function BuildCnnStr() As String

        Dim strTemp As String

        strTemp = "data source=409ADMIN;integrated security=SSPI;initial catalog=delupins;persist security info=False"
         'strTemp = "data source=STALKER;integrated security=FALSE;initial catalog=delupins;persist security info=False;uid=sa;pwd=" 

        Return strTemp

    End Function

    Private Sub DelDataGrid(ByVal dg As DataGrid)
        If Not Me.BindingContext(dg.DataSource).Count =  0  Then
            Me.BindingContext(dg.DataSource).RemoveAt(Me.BindingContext(dg.DataSource).Position)
        End If
    End Sub

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        DelDataGrid(dgTelo)
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        DelDataGrid(dgCity)
    End Sub

    Private Sub bttnDelonServer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnDelonServer.Click
        
        daTest.Update(dsTest.Tables("TeloTbl").Select("", "", DataViewRowState.Deleted))
        daTest.Update(dsTest.Tables("TeloTbl").Select("", "", DataViewRowState.Added))
        daTest.Update(dsTest.Tables("TeloTbl").Select("", "", DataViewRowState.ModifiedCurrent))

        daTest.Update(dsTest.Tables("CityTbl").Select("", "", DataViewRowState.Deleted))
        daTest.Update(dsTest.Tables("CityTbl").Select("", "", DataViewRowState.Added))
        daTest.Update(dsTest.Tables("CityTbl").Select("", "", DataViewRowState.ModifiedCurrent))

            End Sub

Хранимая утилита например для INSERT такая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
PROCEDURE dbo.spInsertTelo
(@FIO char( 50 )= 'XXX',@City char(40)='XXX',@CityId char(40)='XXX') 

AS
if @cityid<> 'XXX'  
INSERT INTO dbo.CityTbl(CityId) VALUES (@CityId)
if @FIO<> 'XXX' 
INSERT INTO dbo.TeloTbl(FIO, City) VALUES(@FIO,@City)

	/* SET NOCOUNT ON */
	RETURN 
Я так понимаю, что если у меня около 15 таблиц в DataSet, и я хочу иметь всего три процедуры, по одной на каждую операцию(INSERT,UPDATE,DELETE) обновления данных в базе на SQL сервере я должен буду, вопервых для того же daTest.InsertCommand описать кучу параметров, а в самой хранимой процедуре указать все эти параметры и перед каждым оператором INSERT делать проверку, есть такие параметры, т.е. есть ли строки на вставление или нет. Так?
Как альтернатива иметь несколько процедур для каждой операции, но тогда придется менять параметр
Код: plaintext
1.
cmdSqlServerInsert.CommandText = "dbo.spInsertTelo"
каждый раз когда нужно выполнять другую хранимую процедуру.
Как все таки правильно?Извините за натойчивость и сумбур, но это мой первый проект, так что пытаюсь разобраться:)
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по внесению изменений в базу SQL Server.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]