Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как вернуть изменения DataSet в БД, Можно ли обновить таблицу в БД целиком 
V
    Опции темы
Чердак
  Дата 21.10.2008, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 8.12.2004

Репутация: нет
Всего: нет



Доброе время суток. 
Вот что есть:

Код

 private string SelectString = @"
            SELECT  *
            FROM    ContractorBasic";
            SqlDataAdapter da = new SqlDataAdapter();
            SqlCommandBuilder bld = new SqlCommandBuilder();  
//.......

SqlDataAdapter da = new SqlDataAdapter(SelectString, ConnectionToSql);
            SqlCommandBuilder bld = new SqlCommandBuilder(da);            
                da.Fill(ds);
                ds.Tables[0].TableName = "NewDataSource";

                dataGridView1.DataSource = ds;
                dataGridView1.DataMember = "NewDataSource";


    private void button3_Click(object sender, EventArgs e)
        {
            
            da.Update(ds.Tables[0]);
             
        }


В гриде вносятся изменения в разные строки таблицы. Необходимо чтобы эти изменения были внесены и в базу. 
 da.Update(ds.Tables[0]); - это видимо неправильно, потомучто ругается. А как тогда?

--------------------
PM MAIL   Вверх
Чердак
Дата 21.10.2008, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 8.12.2004

Репутация: нет
Всего: нет



Ргается вот как: 
Цитата

Update requires a valid UpdateCommand when passed DataRow collection with modified rows.

--------------------
PM MAIL   Вверх
Partizan
Дата 21.10.2008, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67



Чердак, пример из MSDN из статьи Updating Data Sources with DataAdapters (ADO.NET)

Код

private static void AdapterUpdate(string connectionString)
{
    using (SqlConnection connection =
               new SqlConnection(connectionString))
    {
        SqlDataAdapter dataAdpater = new SqlDataAdapter(
          "SELECT CategoryID, CategoryName FROM Categories",
          connection);

        dataAdpater.UpdateCommand = new SqlCommand(
           "UPDATE Categories SET CategoryName = @CategoryName " +
           "WHERE CategoryID = @CategoryID", connection);

        dataAdpater.UpdateCommand.Parameters.Add(
           "@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");

        SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add(
          "@CategoryID", SqlDbType.Int);
        parameter.SourceColumn = "CategoryID";
        parameter.SourceVersion = DataRowVersion.Original;

        DataTable categoryTable = new DataTable();
        dataAdpater.Fill(categoryTable);

        DataRow categoryRow = categoryTable.Rows[0];
        categoryRow["CategoryName"] = "New Beverages";

        dataAdpater.Update(categoryTable);

        Console.WriteLine("Rows after update.");
        foreach (DataRow row in categoryTable.Rows)
        {
            {
                Console.WriteLine("{0}: {1}", row[0], row[1]);
            }
        }
    }
}




--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Чердак
  Дата 21.10.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 8.12.2004

Репутация: нет
Всего: нет



Может я конечно не так понял пример, но обновление там идет по строке, а не по всему DataSet. 
Я понимаю так, при редактировании DataSet (допустим всех строк), Adapter.Update -  должен икать введенные изменения и заносить их в базу. Как это сделать?
вот пример из помощи, но у меня ругается на это:

Код

try
{
    SqlDataAdapter1.Update(Dataset1.Tables["Table1"]);
}
catch (Exception e)
{
    // Error during Update, add code to locate error, reconcile 
    // and try to update again.
}



у меня ведь не добавление новой записи или удаление, а редактирование уже существующих. Как это обновляется в базе?

Это сообщение отредактировал(а) Чердак - 21.10.2008, 14:15
--------------------
PM MAIL   Вверх
Partizan
Дата 21.10.2008, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67



Чердак, Чему равно значение свойства UpdateCommand у вашего SqlDataAdapter?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Чердак
Дата 21.10.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 8.12.2004

Репутация: нет
Всего: нет



UpdateCommand - автоматически, потому что использую:

Код

 SqlCommandBuilder bld = new SqlCommandBuilder(da); 


Добавлено через 4 минуты и 30 секунд
Вот если писать так, то ни на что не ругается, но и в базе обновления не появляются

Код

private string SelectString = @"
            SELECT  *
            FROM    ContractorBasic";

//---------------------------------
SqlDataAdapter da1 = new SqlDataAdapter(SelectString, ConnectionToSql);
            SqlCommandBuilder bld1 = new SqlCommandBuilder(da1);            
                da1.Fill(ds);
                ds.Tables[0].TableName = "NewDataSource";
                bs1.DataSource = ds;

                dataGridView1.DataSource = bs1;
                bs1.DataMember = "NewDataSource";
                bindingNavigator1.BindingSource = bs1;

//Вносим изменения в грид:

 Random fixRand = new Random();
           
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                switch (fixRand.Next(3))
                {
                    case 1:
                        dataGridView1.Rows[i].Cells[9].Value = "Высокий";
                        break;
                    case 2:
                        dataGridView1.Rows[i].Cells[9].Value = "Средний";
                        break;

                    default:
                        dataGridView1.Rows[i].Cells[9].Value = "Низкий";
                        break;

                }    

//Сохраняем изменения:

            SqlDataAdapter da = new SqlDataAdapter(SelectString, ConnectionToSql);
            SqlCommandBuilder bld = new SqlCommandBuilder(da);
            DataSet dstemp = new DataSet();

                    da.Fill(dstemp);
                    dstemp.Tables[0].Clear();
                    ds.Tables[0].TableName = "NewDataSource";
                    dstemp.Merge(ds);
                    da.Update(dstemp);
                  


--------------------
PM MAIL   Вверх
Чердак
Дата 22.10.2008, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 8.12.2004

Репутация: нет
Всего: нет



Все работает, сори. Не задал ключ таблицы, поэтому и не изменялись данные.
--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.