Добавление новой таблицы в БД
От: BKMan Россия  
Дата: 06.05.06 20:57
Оценка:
Здравствуйте.
С#
Есть БД MSSQL
хочу программно добавить в БД таблицу

создаю таблицу

DataSet DS = new DataSet();
DataTable DT = new DataTable();
//копирую таблицу DT1 из DataSet
DT = DS.DT1.Copy();
DT.TableName = "hello";

DataRow dr = DT.NewRow();
dr["D1"] = "1";
dr["D2"] = "2";
DT.Rows.Add(dr);

DS.Tables.Add(DT);

Как теперь мне добавить эту таблицу в Базу Данных?
Спасибо.
Re: Добавление новой таблицы в БД
От: ddrakonn  
Дата: 07.05.06 10:04
Оценка:
Здравствуйте, BKMan, Вы писали:

BKM>Здравствуйте.

BKM>С#
BKM>Есть БД MSSQL
BKM>хочу программно добавить в БД таблицу

BKM>создаю таблицу


BKM>DataSet DS = new DataSet();

BKM>DataTable DT = new DataTable();
BKM>//копирую таблицу DT1 из DataSet
BKM>DT = DS.DT1.Copy();
BKM>DT.TableName = "hello";

BKM>DataRow dr = DT.NewRow();

BKM>dr["D1"] = "1";
BKM>dr["D2"] = "2";
BKM>DT.Rows.Add(dr);

BKM>DS.Tables.Add(DT);


BKM>Как теперь мне добавить эту таблицу в Базу Данных?

BKM>Спасибо.


Никак...
Почему да пототому что делаеться ето так


Dim SQLQuery as String = текст запроса
Dim CN as Data.Connection = New Data.Connection(СonnectionString)
Dim tr as Data.Transaction = New Data.Transaction
cn.transaction = tr
Dim cmd1 as Data.Command = New Data.Command(SQLQuery,cn)
Dim cmd2 as Data.Command = New Data.Command(SQLQuery,cn)
tr.Command = cmd1
Try
tr.Execute

////
tr.RoolBack
End try


Ето для 2005 насчет vb6 все гораздо проще...
В коде намерено допущены ошибки удачи!
Re[2]: Добавление новой таблицы в БД
От: BKMan Россия  
Дата: 07.05.06 17:37
Оценка:
Здравствуйте, ddrakonn, Вы писали:

Большое спасибо.
Сам разобрался
Re[2]: Добавление новой таблицы в БД
От: _d_m_  
Дата: 08.05.06 10:11
Оценка:
Здравствуйте, ddrakonn, Вы писали:


D>Никак...

D>Почему да пототому что делаеться ето так


D>Dim SQLQuery as String = текст запроса

D>Dim CN as Data.Connection = New Data.Connection(СonnectionString)
D>Dim tr as Data.Transaction = New Data.Transaction
D>cn.transaction = tr
D>Dim cmd1 as Data.Command = New Data.Command(SQLQuery,cn)
D>Dim cmd2 as Data.Command = New Data.Command(SQLQuery,cn)
D>tr.Command = cmd1
D>Try
D>tr.Execute

D>////

D>tr.RoolBack
D>End try


D>Ето для 2005 насчет vb6 все гораздо проще...

D>В коде намерено допущены ошибки удачи!

Да пототому, чтото делается не так:
using( SqlConnection Conn = new SqlConnection(...) )
{
    using( SqlCommand Cmd = new SQlCommand("create table ...", Conn) )
    {
        Conn.Open();
        Cmd.ExecuteNonQuery();
    }
}

А тебе домашнее задание — найди отличия
Re[3]: Добавление новой таблицы в БД
От: _d_m_  
Дата: 08.05.06 10:16
Оценка:
Здравствуйте, _d_m_, Вы писали:


___>Да пототому, чтото делается не так:


Хотел сказать — делается так:

___>
___>using( SqlConnection Conn = new SqlConnection(...) )
___>{
___>    using( SqlCommand Cmd = new SQlCommand("create table ...", Conn) )
___>    {
___>        Conn.Open();
___>        Cmd.ExecuteNonQuery();
___>    }
___>}
___>

___>А тебе домашнее задание — найди отличия
Re[4]: Добавление новой таблицы в БД
От: ddrakonn  
Дата: 09.05.06 11:16
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, _d_m_, Вы писали:



___>>Да пототому, чтото делается не так:


___>Хотел сказать — делается так:


___>>
___>>using( SqlConnection Conn = new SqlConnection(...) )
___>>{
___>>    using( SqlCommand Cmd = new SQlCommand("create table ...", Conn) )
___>>    {
___>>        Conn.Open();
___>>        Cmd.ExecuteNonQuery();
___>>    }
___>>}
___>>

___>>А тебе домашнее задание — найди отличия



Они известны!
Я разбирался с етим када пришлось писать прогу для покета(КПК)...
и вон енто дело выделял в отдельную функцию для отправки данных т.е. унифицировал...хотя можно и так...Вообщем-то не важно все равно работает ету методику я использую для создания динамических табличек после запросов...и пишу примерно так....


[/vb]
Public ReadOnly Property GetTable() as Data.DataTable
Get
Dim Conn as New Data.SQLCEServer.SQLCEConnection = New Data.SQLCEServer.SQLCEConnection(....)
Dim Table as Data.DataTable = New Data.DataTable(...)
Dim tad as Data.SqlCeServer.SqlCeDataAdapter = Data.SqlCeServer.SqlCeDataAdapter(Query,Conn)
Tadd.Fill(Table)
Return Table
End Get
Return Table

А ето насчет домашнего задания мсдн говорит так правильней)))хотя.....

Friend Sub Commit_Transaction(ByVal Query As String, ByVal cn As Data.SqlServerCe.SqlCeConnection)
cn.Open()
Dim tr As System.Data.SqlServerCe.SqlCeTransaction = cn.BeginTransaction()
Dim cmd1 As System.Data.SqlServerCe.SqlCeCommand = cn.CreateCommand()
Dim cmd2 As System.Data.SqlServerCe.SqlCeCommand = cn.CreateCommand()
cmd1.Connection = cn
cmd1.Transaction = tr
Try
cmd1.CommandText = Query
cmd1.ExecuteNonQuery()
tr.Commit()
Catch ex As Exception
MsgBox("Rollback action. Check Input values. Changes that you do would not be accept", MsgBoxStyle.Critical, "Critical Error")
tr.Rollback()
Finally
cn.Close()
End Try
End Sub



Да а что будеш делать если в запросе ошибка?
Re[5]: Добавление новой таблицы в БД
От: _d_m_  
Дата: 10.05.06 01:19
Оценка:
Здравствуйте, ddrakonn, Вы писали:


D>А ето насчет домашнего задания мсдн говорит так правильней)))хотя.....


D> Friend Sub Commit_Transaction(ByVal Query As String, ByVal cn As Data.SqlServerCe.SqlCeConnection)

D> cn.Open()
D> Dim tr As System.Data.SqlServerCe.SqlCeTransaction = cn.BeginTransaction()
D> Dim cmd1 As System.Data.SqlServerCe.SqlCeCommand = cn.CreateCommand()
D> Dim cmd2 As System.Data.SqlServerCe.SqlCeCommand = cn.CreateCommand()
D> cmd1.Connection = cn
D> cmd1.Transaction = tr
D> Try
D> cmd1.CommandText = Query
D> cmd1.ExecuteNonQuery()
D> tr.Commit()
D> Catch ex As Exception
D> MsgBox("Rollback action. Check Input values. Changes that you do would not be accept", MsgBoxStyle.Critical, "Critical Error")
D> tr.Rollback()

D> Finally
D> cn.Close()
D> End Try
D> End Sub



D>Да а что будеш делать если в запросе ошибка?


В том примере я не показывал конструкции try/catch, но она предполагается. Необходимость транзакции в данном примере определяется какой именно текст в Query. Если там несколько операторов и минимум один из них изменяет данные, то возможно они нуждаются в транзакции, то да. Если там один оператор — в транзакции нет необходимости. Вот собственно, что я хотел сказать. Я не знаю откуда ты взял этот пример, но:
1. cmd2 — не используется никак. Если, бы использовалась, то возможно транзакция тоже была-бы необходима.
2. Выделенный фрагмент пример того как не надо делать. Надо так:
catch(Exception _ex)
{
    tr.Rollback();
    MessageBox.Show(...);
}

Иначе, транзакция и ее блокировки в БД будут висеть так долго, пока пользователь не соизволит нажать ОК в диалоге.
Re[6]: Добавление новой таблицы в БД
От: Аноним  
Дата: 10.05.06 09:17
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, ddrakonn, Вы писали:



D>>А ето насчет домашнего задания мсдн говорит так правильней)))хотя.....


D>> Friend Sub Commit_Transaction(ByVal Query As String, ByVal cn As Data.SqlServerCe.SqlCeConnection)

D>> cn.Open()
D>> Dim tr As System.Data.SqlServerCe.SqlCeTransaction = cn.BeginTransaction()
D>> Dim cmd1 As System.Data.SqlServerCe.SqlCeCommand = cn.CreateCommand()
D>> Dim cmd2 As System.Data.SqlServerCe.SqlCeCommand = cn.CreateCommand()
D>> cmd1.Connection = cn
D>> cmd1.Transaction = tr
D>> Try
D>> cmd1.CommandText = Query
D>> cmd1.ExecuteNonQuery()
D>> tr.Commit()
D>> Catch ex As Exception
D>> MsgBox("Rollback action. Check Input values. Changes that you do would not be accept", MsgBoxStyle.Critical, "Critical Error")
D>> tr.Rollback()

D>> Finally
D>> cn.Close()
D>> End Try
D>> End Sub



D>>Да а что будеш делать если в запросе ошибка?


___>В том примере я не показывал конструкции try/catch, но она предполагается. Необходимость транзакции в данном примере определяется какой именно текст в Query. Если там несколько операторов и минимум один из них изменяет данные, то возможно они нуждаются в транзакции, то да. Если там один оператор — в транзакции нет необходимости. Вот собственно, что я хотел сказать. Я не знаю откуда ты взял этот пример, но:

___>1. cmd2 — не используется никак. Если, бы использовалась, то возможно транзакция тоже была-бы необходима.
___>2. Выделенный фрагмент пример того как не надо делать. Надо так:
___>
___>catch(Exception _ex)
___>{
___>    tr.Rollback();
___>    MessageBox.Show(...);
___>}
___>

___>Иначе, транзакция и ее блокировки в БД будут висеть так долго, пока пользователь не соизволит нажать ОК в диалоге.



По поводу cmd2 на офф сайте мсдн говориться, что так правильно создавать пустой обект....
По поводу месаги ето удобно в режиме отладки...как мне кажеться видеть смог ли ты заставить пользователи вводить данные так чтоб все делалось.

Пример етот ето мною написаный код....Нигде я его не брал.
Re[7]: Добавление новой таблицы в БД
От: _d_m_  
Дата: 10.05.06 11:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, _d_m_, Вы писали:



А>По поводу cmd2 на офф сайте мсдн говориться, что так правильно создавать пустой обект....


А зачем тебе нужен пустой объект класса SqlCommand ?

А>По поводу месаги ето удобно в режиме отладки...как мне кажеться видеть смог ли ты заставить пользователи вводить данные так чтоб все делалось.


А>Пример етот ето мною написаный код....Нигде я его не брал.


Не понял — в чем фишка ролбэка после диалога?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.