powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как сделать insert таблицы DataTable на mssql server?
7 сообщений из 7, страница 1 из 1
Как сделать insert таблицы DataTable на mssql server?
    #37395226
volkandrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица представленная DataTable, в ней содержатся данные, создаётся таблица DataTable на клиенте. На mssql server есть пустая таблица содержащая равное количество полей, столько же сколько и в DataTable. Как закачать таблицу DataTable в таблицу на mssql server?
...
Рейтинг: 0 / 0
Как сделать insert таблицы DataTable на mssql server?
    #37395241
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
volkandrey,

Например вот так, создаёшь класс для общения с БД:

Код: 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.
Imports System.Data.SqlClient
Imports ZKLZ_SQLDataLayer

Public NotInheritable Class dbeFASTENING
   
   Private Sub New()
      'private constructor
   End Sub
   
   Private Shared strSQL As String = ""
   
   Public Shared Function GetAllDataTable(ByVal UNT_ID As Integer) As DataTable
      strSQL = "SELECT FST_ID, FST__MNF_ID, MNF_NAME, FST__UNT_ID " _
             & "FROM FASTENING JOIN MANUFACTURE ON FST__MNF_ID=MNF_ID " _
             & "WHERE FST__UNT_ID=" & UNT_ID.ToString
      Return DBExecutor.ExecuteSelectCommand(strSQL)
   End Function
   
   Public Shared Sub UpdateRows(ByVal DT As DataTable, ByVal TR As SqlTransaction)
      Dim AD As New SqlDataAdapter()
      strSQL = "INSERT INTO FASTENING (FST__MNF_ID, FST__UNT_ID) VALUES (@MNF_ID, @UNT_ID)"
      AD.InsertCommand = New SqlCommand(strSQL, DBExecutor.CNN, TR)
      AD.InsertCommand.Parameters.Add("@MNF_ID", SqlDbType.Int,  10 , "FST__MNF_ID")
      AD.InsertCommand.Parameters.Add("@UNT_ID", SqlDbType.Int,  10 , "FST__UNT_ID")
      strSQL = "UPDATE FASTENING SET FST__MNF_ID=@MNF_ID, FST__UNT_ID=@UNT_ID WHERE FST_ID=@FST_ID"
      AD.UpdateCommand = New SqlCommand(strSQL, DBExecutor.CNN, TR)
      AD.UpdateCommand.Parameters.Add("@MNF_ID", SqlDbType.Int,  10 , "FST__MNF_ID")
      AD.UpdateCommand.Parameters.Add("@UNT_ID", SqlDbType.Int,  10 , "FST__UNT_ID")
      AD.UpdateCommand.Parameters.Add("@FST_ID", SqlDbType.Int,  10 , "FST_ID")
      strSQL = "DELETE FROM FASTENING WHERE FST_ID=@FST_ID"
      AD.DeleteCommand = New SqlCommand(strSQL, DBExecutor.CNN, TR)
      AD.DeleteCommand.Parameters.Add("@FST_ID", SqlDbType.Int,  10 , "FST_ID")
      AD.Update(DT)
   End Sub
   
End Class

В коде используешь этот класс:

Код: plaintext
1.
2.
3.
Dim DT As DataTable = dbeFASTENING.GetAllDataTable( 0 )
' ... редактируешь DT
' и сохраняешь в базу
dbeFASTENING.UpdateRows(DT, TR)
...
Рейтинг: 0 / 0
Как сделать insert таблицы DataTable на mssql server?
    #37395259
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как сделать insert таблицы DataTable на mssql server?
    #37395345
volkandrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barkanvolkandrey,

Например вот так, создаёшь класс для общения с БД:

Код: 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.
Imports System.Data.SqlClient
Imports ZKLZ_SQLDataLayer

Public NotInheritable Class dbeFASTENING
   
   Private Sub New()
      'private constructor
   End Sub
   
   Private Shared strSQL As String = ""
   
   Public Shared Function GetAllDataTable(ByVal UNT_ID As Integer) As DataTable
      strSQL = "SELECT FST_ID, FST__MNF_ID, MNF_NAME, FST__UNT_ID " _
             & "FROM FASTENING JOIN MANUFACTURE ON FST__MNF_ID=MNF_ID " _
             & "WHERE FST__UNT_ID=" & UNT_ID.ToString
      Return DBExecutor.ExecuteSelectCommand(strSQL)
   End Function
   
   Public Shared Sub UpdateRows(ByVal DT As DataTable, ByVal TR As SqlTransaction)
      Dim AD As New SqlDataAdapter()
      strSQL = "INSERT INTO FASTENING (FST__MNF_ID, FST__UNT_ID) VALUES (@MNF_ID, @UNT_ID)"
      AD.InsertCommand = New SqlCommand(strSQL, DBExecutor.CNN, TR)
      AD.InsertCommand.Parameters.Add("@MNF_ID", SqlDbType.Int,  10 , "FST__MNF_ID")
      AD.InsertCommand.Parameters.Add("@UNT_ID", SqlDbType.Int,  10 , "FST__UNT_ID")
      strSQL = "UPDATE FASTENING SET FST__MNF_ID=@MNF_ID, FST__UNT_ID=@UNT_ID WHERE FST_ID=@FST_ID"
      AD.UpdateCommand = New SqlCommand(strSQL, DBExecutor.CNN, TR)
      AD.UpdateCommand.Parameters.Add("@MNF_ID", SqlDbType.Int,  10 , "FST__MNF_ID")
      AD.UpdateCommand.Parameters.Add("@UNT_ID", SqlDbType.Int,  10 , "FST__UNT_ID")
      AD.UpdateCommand.Parameters.Add("@FST_ID", SqlDbType.Int,  10 , "FST_ID")
      strSQL = "DELETE FROM FASTENING WHERE FST_ID=@FST_ID"
      AD.DeleteCommand = New SqlCommand(strSQL, DBExecutor.CNN, TR)
      AD.DeleteCommand.Parameters.Add("@FST_ID", SqlDbType.Int,  10 , "FST_ID")
      AD.Update(DT)
   End Sub
   
End Class

В коде используешь этот класс:

Код: plaintext
1.
2.
3.
Dim DT As DataTable = dbeFASTENING.GetAllDataTable( 0 )
' ... редактируешь DT
' и сохраняешь в базу
dbeFASTENING.UpdateRows(DT, TR)


А как это сделать на C#?
...
Рейтинг: 0 / 0
Как сделать insert таблицы DataTable на mssql server?
    #37395461
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
volkandrey,

В студии должен быть конвертер VB => C# и наоборот.
...
Рейтинг: 0 / 0
Как сделать insert таблицы DataTable на mssql server?
    #37395534
volkandrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ http://msdn.microsoft.com/ru-ru/library/system.data.sqlclient.sqlbulkcopy.aspx

Помогла эта ссылка огромное спасибо! Это делается с помощью класса SqlBulkCopy.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
                SqlBulkCopy bulk = new SqlBulkCopy(conn);
                bulk.DestinationTableName = "dbo.ParseUniformIsu"; //имя таблицы на сервере
                try
                {
                    bulk.WriteToServer(table); //где "table"DataTable с данными
                }
                catch
                {
                    MessageBox.Show("Закачка на сервер завершилась не удачно!", "Ошибка закачки данных на сервер!");
                }
                finally
                {
                    conn.Close();
                }
где, "conn" текущие открытое подключение к БД.
Я так понимаю DataTable и таблица на сервере по структуре должны совпадать, у меня это так и ошибок не возникает. Думаю если структура будет разной, то это либо будут Exception, либо потеря данных.
...
Рейтинг: 0 / 0
Как сделать insert таблицы DataTable на mssql server?
    #37395692
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
volkandreyЯ так понимаю DataTable и таблица на сервере по структуре должны совпадать, у меня это так и ошибок не возникает. Думаю если структура будет разной, то это либо будут Exception, либо потеря данных.
SqlBulkCopy.ColumnMappings
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как сделать insert таблицы DataTable на mssql server?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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