Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как сделать insert таблицы DataTable на mssql server? / 7 сообщений из 7, страница 1 из 1
15.08.2011, 10:11
    #37395226
volkandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать insert таблицы DataTable на mssql server?
Есть таблица представленная DataTable, в ней содержатся данные, создаётся таблица DataTable на клиенте. На mssql server есть пустая таблица содержащая равное количество полей, столько же сколько и в DataTable. Как закачать таблицу DataTable в таблицу на mssql server?
...
Рейтинг: 0 / 0
15.08.2011, 10:19
    #37395241
Barkan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать insert таблицы DataTable на mssql server?
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
15.08.2011, 10:29
    #37395259
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать insert таблицы DataTable на mssql server?
...
Рейтинг: 0 / 0
15.08.2011, 11:12
    #37395345
volkandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать insert таблицы DataTable на mssql server?
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
15.08.2011, 12:05
    #37395461
Barkan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать insert таблицы DataTable на mssql server?
volkandrey,

В студии должен быть конвертер VB => C# и наоборот.
...
Рейтинг: 0 / 0
15.08.2011, 12:29
    #37395534
volkandrey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать insert таблицы DataTable на mssql server?
МСУ 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
15.08.2011, 13:13
    #37395692
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать insert таблицы DataTable на mssql server?
volkandreyЯ так понимаю DataTable и таблица на сервере по структуре должны совпадать, у меня это так и ошибок не возникает. Думаю если структура будет разной, то это либо будут Exception, либо потеря данных.
SqlBulkCopy.ColumnMappings
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как сделать insert таблицы DataTable на mssql server? / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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