Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Обновление базы с помощью датаадаптер.Update() / 7 сообщений из 7, страница 1 из 1
16.03.2009, 09:20
    #35870530
Обновление базы с помощью датаадаптер.Update()
Хочу вставлять данные в базу целым массивом, выдается ошибка
Для обновления требуется действительный InsertCommand при передаче коллекции DataRow с новыми строками.
private void WriteDataSet()
{
SqlConnection cn = new SqlConnection(cs);
SqlCommand com = new SqlCommand();
com.Connection = cn;
cn.Open();

DataTable myDataTable = new System.Data.DataTable("N");
// Declare variables for DataColumn and DataRow objects.
DataColumn myDataColumn;
DataRow myDataRow;
SqlDataAdapter da = new SqlDataAdapter("Select * from N", cn100);
DataSet myDataSet=new DataSet("N");
da.Fill(myDataSet);


// Create new DataColumn, set DataType, ColumnName and add to DataTable.
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.Int32");
myDataColumn.ColumnName = "a";
myDataColumn.ReadOnly = true;
myDataColumn.Unique = true;
myDataTable.Columns.Add(myDataColumn);

myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.String");
myDataColumn.ColumnName = "b";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "b";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = false;
myDataColumn.MaxLength = 100;
myDataTable.Columns.Add(myDataColumn);

DataColumn[] PrimaryKeyColumns = new DataColumn[1];
PrimaryKeyColumns[0] = myDataTable.Columns["a"];
myDataTable.PrimaryKey = PrimaryKeyColumns;


myDataSet = new DataSet();


for (int i = 0; i <= 2; i++) //заполняю дататэйбл массивом строк
{
myDataRow = myDataTable.NewRow();
myDataRow["a"] = i;
myDataRow["b"] = "b " + i;
myDataTable.Rows.Add(myDataRow);
}
myDataSet.Tables.Add(myDataTable);
da.InsertCommand = command;
da.Update(myDataSet,"N");//ошибка;хочу вставлять данные в базу целым массивом, но не удается :(
...
Рейтинг: 0 / 0
16.03.2009, 09:22
    #35870532
Обновление базы с помощью датаадаптер.Update()
Хочу вставлять данные в базу целым массивом, выдается ошибка
Для обновления требуется действительный InsertCommand при передаче коллекции DataRow с новыми строками.
Код: 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.
private void WriteDataSet()
{
SqlConnection cn = new SqlConnection(cs);
SqlCommand com = new SqlCommand();
com.Connection = cn;
cn.Open();

DataTable myDataTable = new System.Data.DataTable("N");
DataColumn myDataColumn;
DataRow myDataRow;
SqlDataAdapter da = new SqlDataAdapter("Select * from N", cn100);
DataSet myDataSet=new DataSet("N");
da.Fill(myDataSet);


myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.Int32");
myDataColumn.ColumnName = "a";
myDataColumn.ReadOnly = true;
myDataColumn.Unique = true;
myDataTable.Columns.Add(myDataColumn);

myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.String");
myDataColumn.ColumnName = "b";
myDataColumn.AutoIncrement = false;
myDataColumn.Caption = "b";
myDataColumn.ReadOnly = false;
myDataColumn.Unique = false;
myDataColumn.MaxLength = 100;
myDataTable.Columns.Add(myDataColumn);

DataColumn[] PrimaryKeyColumns = new DataColumn[1];
PrimaryKeyColumns[0] = myDataTable.Columns["a"];
myDataTable.PrimaryKey = PrimaryKeyColumns;


myDataSet = new DataSet();


for (int i = 0; i <= 2; i++) //заполняю дататэйбл массивом строк
{
myDataRow = myDataTable.NewRow();
myDataRow["a"] = i;
myDataRow["b"] = "b " + i;
myDataTable.Rows.Add(myDataRow);
}
myDataSet.Tables.Add(myDataTable);
da.Update(myDataSet,"N");//ошибка;хочу вставлять данные в базу целым массивом, но не удается :(
...
Рейтинг: 0 / 0
16.03.2009, 10:05
    #35870637
aleks-sam
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление базы с помощью датаадаптер.Update()
/topic/589453&hl=rdfg
...
Рейтинг: 0 / 0
16.03.2009, 10:33
    #35870730
Обновление базы с помощью датаадаптер.Update()
aleks-sam/topic/589453&hl=rdfg
С этим все ясно!
Теперь другая проблема:

Хочу в дататэйбл записать созданый предварительно массив, т.е. сделать так:
Код: plaintext
\n  object[,] obj = { \n                           {1,"sa"},\n                           {2,"dsaf"}, \n                           {3,"fds" }, \n                           {4,"rew" },\n                           };\n......\n......\n......\n  //  for (int i = 0; i <= 2; i++)\n           // {\n             //   myDataRow = myDataTable.NewRow();\n             //   myDataRow["a"] = i;\n             //   myDataRow["b"] = "b " + i;\n                myDataTable.Rows.Add(Convert.ToInt32(obj));//выскакивает ошибка Не удалось привести тип объекта "System.Object[,]" к типу "System.IConvertible".\n          //  }  \n

Как это исправить?
...
Рейтинг: 0 / 0
16.03.2009, 10:39
    #35870749
aleks-sam
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление базы с помощью датаадаптер.Update()
Код: plaintext
Convert.ToInt32(obj)
Ну вы что творите то ))
Как вариант записать все в одну строчку через символ-разделитель
...
Рейтинг: 0 / 0
16.03.2009, 10:42
    #35870768
aleks-sam
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление базы с помощью датаадаптер.Update()
И что это?
Код: plaintext
1.
2.
3.
4.
5.
object[,] obj = { 
                           {1,"sa"},
                           {2,"dsaf"}, 
                           {3,"fds" }, 
                           {4,"rew" },
                           };

Может в отдельную таблицу с ключиком?..
...
Рейтинг: 0 / 0
16.03.2009, 11:15
    #35870870
Обновление базы с помощью датаадаптер.Update()
Почему первый способ записи работает быстрее второго, хотя в первом запись происходит по одному элементу, а во втором целым массивом?

Первый способ через хранимую процедуру: гдето 1500 записей - за секунду
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
private void WriteTagToBase()
        {
            SqlConnection cn100 = new SqlConnection(cs3);
             cn100.Open();
             dtSt = DateTime.Now;
            for (int i = 0; i <= 5000; i++)
            {
                SqlCommand comInsert = new SqlCommand();
                comInsert.Connection =cn100;
                comInsert.CommandText = "INSERT";
                comInsert.CommandType = CommandType.StoredProcedure;
                SqlParameter parA= new SqlParameter("@A", i);
                comInsert.Parameters.Add(parA);
                SqlParameter parO = new SqlParameter("@O", "b " + i);
                comInsert.Parameters.Add(parO);
                comInsert.CommandTimeout = 0;
                comInsert.ExecuteNonQuery();
               
            }
   DateTime dtEnd = DateTime.Now;
            MessageBox.Show("Начало " + dtSt + " Конец " + dtEnd);

        }




2 ой способ через датасет и адаптер. 500 записей в секунду
Код: 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.
 private void WriteDataSet()
        {
            OleDbConnection cn100 = new OleDbConnection(cs3);
            cn100.Open();

            DataTable myDataTable = new System.Data.DataTable("N");
            DataColumn myDataColumn;
            DataRow myDataRow;
            OleDbDataAdapter da = new OleDbDataAdapter("Select * from N", cn100);
            DataSet myDataSet=new DataSet("N");
            OleDbCommandBuilder builder = new OleDbCommandBuilder(da);
            da.Fill(myDataSet);
 
            myDataColumn = new DataColumn();
            myDataColumn.DataType = System.Type.GetType("System.Int32");
            myDataColumn.ColumnName = "a";
            myDataColumn.ReadOnly = true;
            myDataColumn.Unique = true;
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = System.Type.GetType("System.String");
            myDataColumn.ColumnName = "b";
            myDataColumn.AutoIncrement = false;
            myDataColumn.Caption = "b";
            myDataColumn.ReadOnly = false;
            myDataColumn.Unique = false;
            myDataColumn.MaxLength = 100;

            myDataTable.Columns.Add(myDataColumn);

            DataColumn[] PrimaryKeyColumns = new DataColumn[1];
            PrimaryKeyColumns[0] = myDataTable.Columns["a"];
            myDataTable.PrimaryKey = PrimaryKeyColumns;

            myDataSet = new DataSet();
          
            for (int i = 0; i <= 5000; i++)
            {
                myDataRow = myDataTable.NewRow();
                myDataRow["a"] = i;
                myDataRow["b"] = "b " + i;
                myDataTable.Rows.Add(myDataRow);
            }        

            myDataSet.Tables.Add(myDataTable);
            da.UpdateCommand = builder.GetUpdateCommand();
            dtSt = DateTime.Now;
            da.Update(myDataSet,"N");
            DateTime dtEnd = DateTime.Now;
            MessageBox.Show("Начало " + dtSt + " Конец " + dtEnd);
        }
   
  


Модератор: Тема перенесена из форума "C#.NET".
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Обновление базы с помощью датаадаптер.Update() / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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