Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Как верно внести в базу данные из DataSet


Автор: Иван Человеков 5.3.2010, 11:09
Добрый день.

Хочу получить вот в каком вопросе:
Есть у меня локальная база, в которой я собираю данные(их не много 100 200 строк), затем мне надо отослать их на SQLserver 2005.
Как мне это верно сделать?
Я создал подключение к SQL2005, получил с него пару записей в  dt, затем добавил в этот DataSet(SQL2005) dt данные из локального DataSet dtInvent и хочу сделать обновление в SQL2005 DataAdapter.

В данный момент я затрудняюсь в составлении InsertCommand. 

Код

                string connStr = "Server=192.168.1.3;Database=IRBISDB;Uid=Egor;Pwd=sdfgh";
                using (SqlConnection connection = new SqlConnection(connStr))
                {
                    connection.Open();

                    using (SqlCommand command = connection.CreateCommand())
                    {
                        string queryString = "SELECT * FROM InventoryBooks WHERE NumberDoc = 1;";
                        
                        SqlDataAdapter lDataAdapter = new SqlDataAdapter(queryString, connection);
                        string sqlInsert = "INSERT INTO InventoryBooks"
                            + "(DataDoc, NumberDoc, InventoryCode)VALUES "
                            + " ('{1}','{2}','{3}')", 
                            //Тут не знаю что добавлять, данных-то много

                        DataSet lDS = new DataSet();
                        lDataAdapter.Fill(lDS, "#InventoryBooks");

                        DataTable dt = lDS.Tables[0].Copy();
                        DataTable dtInvent = dbComponent.DBQuery("SELECT DataSent,DataRcvd FROM DataQueue").Tables[0];

                        foreach (DataRow dr in dtInvent.Rows)
                        {
                            DataRow newRow = dt.NewRow();
                            newRow[0] = dateTimePicker1.Value;
                            newRow[1] = "1";
                            newRow[2] = dr[0].ToString();
                            dt.Rows.Add(newRow);
                        }

                        //dt.AcceptChanges();
                        lDataAdapter.Update(lDS.Tables["#InventoryBooks"]);
                        //lDS.AcceptChanges();
                    }
                    connection.Close();
                }


Может это можно сделать проще? В цикле отправлять insert команды? Благодарю.

Автор: jorikdima 5.3.2010, 11:18
В студии есть возможность автогенерации команд обновления, вставки, удаления... Она создаст адаптеры, которыми можно пользоваться и не писать во многих случаях ни одного SQL запроса.

Автор: Иван Человеков 5.3.2010, 12:44
Ребята, почему код:

Код

                using (SqlConnection cn = new SqlConnection(connStr))
                {
                    cn.Open();

                    using (SqlCommand command = cn.CreateCommand())
                    {
                        string queryString = "SELECT * FROM BookInventory;"; // WHERE NumberDoc = 1;";
                        
                        SqlDataAdapter da = new SqlDataAdapter(queryString, cn);

                        string sqlInsert = "INSERT INTO BooksInventory"
                            + "(DataDoc, NumberDoc, CodeInventory)VALUES "
                            + " (@DataDoc,@NumberDoc,@CodeInventory)"; 
                        da.InsertCommand = new SqlCommand(sqlInsert, cn);
                        
                        SqlParameterCollection pc = da.InsertCommand.Parameters;
                        pc.Add("@DataDoc", SqlDbType.DateTime, 0, "DataDoc");
                        pc.Add("@NumberDoc", SqlDbType.VarChar, 0, "NumberDoc");
                        pc.Add("@CodeInventory", SqlDbType.VarChar, 0, "CodeInventory");

                        DataSet lDS = new DataSet();
                        da.Fill(lDS, "#BookInventory");

                        DataTable dt = lDS.Tables[0].Copy();
                        DataTable dtInvent = dbComponent.DBQuery("SELECT CodeInventory FROM BookInventory").Tables[0];

                        foreach (DataRow dr in dtInvent.Rows)
                        {
                            DataRow newRow = dt.NewRow();
                            newRow[0] = dateTimePicker1.Value;
                            newRow[1] = ReportNumericUpDown.Value.ToString();
                            newRow[2] = dr[0].ToString();
                            dt.Rows.Add(newRow);
                        }

                        da.Update(lDS.Tables["#BookInventory"]);
                    }
                    cn.Close();
                }



 не вносит изменений?
Благодарю.

Автор: Иван Человеков 5.3.2010, 14:18
Заменил:

Код

DataTable dt = ds.Tables[0].Copy();


на 
Код

DataTable dt = ds.Tables["#BookInventory"];


Заработало.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)