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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создать таблицу, Новая таблица на создается в БД 
:(
    Опции темы
vingradfriend
Дата 1.5.2006, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Создаю новую таблицу ИМХО по всем правилам, но она не заносится в  БД.
По идее, после 

 
Код

  da.Update(ds);
 
табл. должна появится в БД. но этого не происходит

а 
Код

     da.Fill(ds);

 выдает ошибку 
Цитата

 The Microsoft Jet database engine cannot find the input table or query 'Customers'.  Make sure it exists and that its name is spelled correctly.


Привожу код целиком. Подскажете, что не так.

Код

using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Data.OleDb;

namespace AddTableTst
{
  class CTable
  {
    public void Read()
    {
      string strConn;
      strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\TSystemDB\\TSystem.mdb";
      
      OleDbConnection connection = new OleDbConnection(strConn);
      OleDbDataAdapter da = CreateDataAdapter(connection);

      System.Data.Common.DataTableMapping tableMapping = new System.Data.Common.DataTableMapping();
      tableMapping.SourceTable = "Table";
      tableMapping.DataSetTable = "Customers";
      tableMapping.ColumnMappings.Add("CustomerID", "CustomerID");
      tableMapping.ColumnMappings.Add("CompanyName", "CompanyName");
      da.TableMappings.Add(tableMapping);
  


      DataSet ds = new DataSet();
      CreateTable(ds);
      da.Update(ds);
      da.Fill(ds);

    }
    public static OleDbDataAdapter CreateDataAdapter( OleDbConnection connection)
    {
      string selectCommand = "SELECT CustomerID, CompanyName FROM Customers";
      OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand, connection);

      adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

      // Create the Insert, Update and Delete commands.
      adapter.InsertCommand = new OleDbCommand(
          "INSERT INTO Customers (CustomerID, CompanyName) " +
          "VALUES (?, ?)");

      adapter.UpdateCommand = new OleDbCommand(
          "UPDATE Customers SET CustomerID = ?, CompanyName = ? " +
          "WHERE CustomerID = ?");

      adapter.DeleteCommand = new OleDbCommand(
          "DELETE FROM Customers WHERE CustomerID = ?");

      // Create the parameters.
      adapter.InsertCommand.Parameters.Add("@CustomerID",
          OleDbType.Char, 5, "CustomerID");
      adapter.InsertCommand.Parameters.Add("@CompanyName",
          OleDbType.VarChar, 40, "CompanyName");

      adapter.UpdateCommand.Parameters.Add("@CustomerID",
          OleDbType.Char, 5, "CustomerID");
      adapter.UpdateCommand.Parameters.Add("@CompanyName",
          OleDbType.VarChar, 40, "CompanyName");
      adapter.UpdateCommand.Parameters.Add("@oldCustomerID",
          OleDbType.Char, 5, "CustomerID").SourceVersion =
          DataRowVersion.Original;

      adapter.DeleteCommand.Parameters.Add("@CustomerID",
          OleDbType.Char, 5, "CustomerID").SourceVersion =
          DataRowVersion.Original;

      return adapter;
    }
    private void CreateTable(DataSet dataSet)
    {
      DataTable newTable = new DataTable("Customers");
      newTable.Columns.Add("CustomerID", typeof(int));
      newTable.Columns.Add("CompanyName", typeof(string));
      dataSet.Tables.Add(newTable);
    }

  }
}

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


Опытный
**


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

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



Попробуй поменять строчки 32 и 33 местами. Дело в том, что метод Fill адаптера заполняет созданный объект dataset базой данных, а метод Update обновляет саму базу объектом dataset (обратная операция). А ты пытаешься обновить базу данных пустым dataset'ом и уже после его заполняешь. 
PM MAIL ICQ   Вверх
arilou
Дата 1.5.2006, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


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

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



Цитата(vingradfriend @  1.5.2006,  00:11 Найти цитируемый пост)
табл. должна появится в БД. но этого не происходит

Кажись тут непонятка какая-то. Ты хочешь создать таблицу в БД, или выполнить запрос в таблицу? 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
vingradfriend
Дата 2.5.2006, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(alir @ 1.5.2006,  20:17)
Попробуй поменять строчки 32 и 33 местами. Дело в том, что метод Fill адаптера заполняет созданный объект dataset базой данных, а метод Update обновляет саму базу объектом dataset (обратная операция). А ты пытаешься обновить базу данных пустым dataset'ом и уже после его заполняешь.

Мне нужно создать пустую таблицу и закинуть ее в БД.
Заполняться таблица будет в процессе работы когда-нибудь потом.

Fill я вставил только для проверки. 



 
PM MAIL   Вверх
arilou
Дата 3.5.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


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

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



vingradfriend, для создания таблиц в БД в рантайме надо пользоваться COM библиотекой ADOX. А зачем тебе ее в рантайме создавать в БД?  


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
vingradfriend
Дата 3.5.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(arilou @ 3.5.2006,  19:37)
vingradfriend, для создания таблиц в БД в рантайме надо пользоваться COM библиотекой ADOX. А зачем тебе ее в рантайме создавать в БД?

Мне не нужно создавать БД. Мне нужно уметь создавать таблицы  в зависимости от текущих настроек системы. Эти настройки могут быть изменены runtime.
ADO и ADOX   я использую в C++ среде,  но это к данному вопросу не относится.
Я использую  С# и  ADO.NET.  В док-ции написано как это сделать, я скопировал пример из MSDN и это не работает.
И нужно понять почему.

 
PM MAIL   Вверх
arilou
Дата 3.5.2006, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


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

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



Цитата(vingradfriend @  3.5.2006,  20:24 Найти цитируемый пост)
Мне не нужно создавать БД. Мне нужно уметь создавать таблицы  в зависимости от текущих настроек системы. Эти настройки могут быть изменены runtime.

Я про это и говорю.

Цитата(vingradfriend @  3.5.2006,  20:24 Найти цитируемый пост)
 док-ции написано как это сделать, я скопировал пример из MSDN и это не работает

Это пример создания для таблицы в датасете, а не в БД. Для создания таблиц в БД Access в runtime надо использовать ADOX. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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