powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Обновление базы с помощью датаадаптер.Update()
7 сообщений из 7, страница 1 из 1
Обновление базы с помощью датаадаптер.Update()
    #35870530
Хочу вставлять данные в базу целым массивом, выдается ошибка
Для обновления требуется действительный 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
Обновление базы с помощью датаадаптер.Update()
    #35870532
Хочу вставлять данные в базу целым массивом, выдается ошибка
Для обновления требуется действительный 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
Обновление базы с помощью датаадаптер.Update()
    #35870637
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/topic/589453&hl=rdfg
...
Рейтинг: 0 / 0
Обновление базы с помощью датаадаптер.Update()
    #35870730
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
Обновление базы с помощью датаадаптер.Update()
    #35870749
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Convert.ToInt32(obj)
Ну вы что творите то ))
Как вариант записать все в одну строчку через символ-разделитель
...
Рейтинг: 0 / 0
Обновление базы с помощью датаадаптер.Update()
    #35870768
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что это?
Код: plaintext
1.
2.
3.
4.
5.
object[,] obj = { 
                           {1,"sa"},
                           {2,"dsaf"}, 
                           {3,"fds" }, 
                           {4,"rew" },
                           };

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

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


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