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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ADO.net 
:(
    Опции темы
Finkel
Дата 10.5.2004, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хотелось бы знатьа можно вносить изменения в Бд с помощью технологии OLE DB.
я просто сейчас читаю книгу по си шарпу , но в ней говорится больше о технологиях провайдера SQL
PM MAIL   Вверх
stron
Дата 10.5.2004, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

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



Конечно можно.
Просто The Microsoft SQL Server .NET data provider рекомендуем для работы с MsSQL server 7.0+
(по идеи он должен быстрее работать, т.к. меньше ступеней при в/д)

The Microsoft OLE DB .NET data provider рекомендуем для работы с MsSQL server до версии 6.5 (интересно, а им ещё кто-то пользуется???), Access'ом...........
Просто OLE DB - более универсальная штука, но многие провайдеры придётся скачивать из инета





--------------------
подписи нет
PM ICQ   Вверх
Kurt
Дата 11.5.2004, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



OLE DB работает медленнее, чем специализированные сборки, такие как для MSSQL. Однако OLEDB более универсальна.
Вобщем, на всякий пожарный, вот тебе пример работы через OLEDB.
Тока поменяй цикл, к-й вносит данные в БД, под скорость твоего компа.
Здесь я реализовал все основные операции (создание таблицы, insert, select, удаление..).
Вот:

Код


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

class MainClass
{
public static void Main(string[] args)
{
 OleDbConnection dbConnection = new OleDbConnection();
 dbConnection.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;"+@"data source=G:\baza.mdb";
 dbConnection.Open();
 try{
  Console.WriteLine("Creating table..");
  OleDbCommand mycmd = new OleDbCommand("create table TableFromDotNET (c1 integer, c2 varchar(100))",dbConnection);
  mycmd.ExecuteNonQuery();
  Console.WriteLine("Done.");
 
  Console.WriteLine("Inserting into table..");
  for (int i=1; i<=100000; i++){
   mycmd.CommandText = @"insert into TableFromDotNET values ("+i+",'Yes!!')";
   mycmd.ExecuteNonQuery();
   if (i%1000==0){
    Console.WriteLine(i/1000+"% completed.");
   }
  }
  Console.WriteLine("Done.");
 
  Console.WriteLine("Selecting from table..");
  mycmd.CommandText = "select * from TableFromDotNET";
  OleDbDataReader myDataReader = mycmd.ExecuteReader();
  while (myDataReader.Read()){
   Console.WriteLine("c1="+myDataReader["c1"].ToString()+"   c2="+myDataReader["c2"].ToString());
  }
  myDataReader.Close();
  Console.WriteLine("Done.");
 
  Console.WriteLine("Deleting from table..");
  mycmd.CommandText = "delete from TableFromDotNET";
  mycmd.ExecuteNonQuery();
  Console.WriteLine("Done.");
 
  Console.WriteLine("Deleting table..");
  mycmd.CommandText = "drop table TableFromDotNET";
  mycmd.ExecuteNonQuery();
  Console.WriteLine("Done.");
 
 
 }
 catch (Exception ex){
  Console.WriteLine("Error:"+ex.Message);
 }
 
 dbConnection.Close();
 
 Console.Read();
 return;
}
}


Может, немного коряво, но я думаю понятно.
Если что - спрашивай..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Finkel
Дата 11.5.2004, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
Код
Console.WriteLine("Deleting from table..");
 mycmd.CommandText = "delete from TableFromDotNET";
 mycmd.ExecuteNonQuery();
 Console.WriteLine("Done.");


[

разве есть такая команда в SQL ?
в принцепе все практически ясно , правда половины вещей я не нашел в своей книжке sad.gif.

Можно ли работать обьектом DataSet, а потом записывать этот обьект в бд?


Это сообщение отредактировал(а) Finkel - 12.5.2004, 00:06
PM MAIL   Вверх
stron
Дата 12.5.2004, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

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



Цитата

разве есть такая команда в SQL ?

есть!!
Код

delete from TableFromDotNET

удаляет все строки из таблицы.


--------------------
подписи нет
PM ICQ   Вверх
Kurt
Дата 12.5.2004, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Цитата
в принцепе все практически ясно , правда половины вещей я не нашел в своей книжке .

Если что - спрашивай.. Если сможем - попробуем ответить..
Цитата
Можно ли работать обьектом DataSet, а потом записывать этот обьект в бд?

Не мог бы ты уточнить/перефразировать вопрос?
Тебе нужно решение именно через DataSet?
Я не уверен, что правильно тебя понял..

Это сообщение отредактировал(а) Kurt - 12.5.2004, 20:50


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Kurt
Дата 12.5.2004, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Цитата
Можно ли работать обьектом DataSet, а потом записывать этот обьект в бд?

Аааа.. Понял. Что-то я сразу не сообразил. smile.gif
Посмотри в сторону DataAdapter. Он есть как в OLEDB (OleDbDataAdapter), так и в SQL-сборке (SqlDataAdapter).
В нем есть такие интересные методы как Fill() - заполнение DataSet из базы, а также Update() - обновление БД из DataSet.
Fill() многократно перегружен, можно выбирать нужный "диапозон" записей для загрузки и т.п.
Update() имеет параметры:
- DataSet
- string <Имя таблицы> - какую таблицу обновить..

Перед тем, как исполнять, данный метод тебе нужно определить как минимум Insert операцию.
В примере, прикрепленном ниже, я показал, как это делается - тебе нужно определить входные параметры, имена столбцов, их типы и т.п.
Еще в коде я использовал метод PrintTable - это просто вспомогательный метод, чтоб выводить таблицу.
Для нормальной работы тебе нужна будет база - файл baza.mdb в той же директории, что и .exe, а также таблица myTable с двумя столбцами:
intColumn (целочисл. столбец)
strColumn (строка..).
Что делает пример - открывает базу, записывает в DataSet таблицу из БД, выводит на консоль, добавляет три строки в DataSet, обновляет БД и выводит, что получилось.
Вот код:

Код

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

class MainClass
{
//вспомогательный метод - печатает таблицу..
private static void PrintTable(DataSet ds, string tableName)
{
 Console.WriteLine(tableName+":");
 DataTable tbl = ds.Tables[tableName];
//выводим заголки столбцов
 for(int currentColumn=0; currentColumn<tbl.Columns.Count; currentColumn++)
 {
  Console.Write(tbl.Columns[currentColumn].ColumnName.Trim()+"\t");
 }
 Console.WriteLine();
//собственно данные
 for(int currentRow=0; currentRow<tbl.Rows.Count; currentRow++)
 {
  for(int currentColumn=0; currentColumn<tbl.Columns.Count; currentColumn++)
  {
   Console.Write(tbl.Rows[currentRow][currentColumn].ToString().Trim()+"\t");
  }
  Console.WriteLine();
 }
 
 return;
}

public static void Main(string[] args)
{
 Console.WriteLine("Connecting to database.");
//создаем соединение
 OleDbConnection cn = new OleDbConnection();
 cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;"+@"data source=baza.mdb";
//открываем его
 cn.Open();
 string sqlSelect = "select * from myTable";
//определяем DataAdapter, а также Insert-операцию
 OleDbDataAdapter dAdapter = new OleDbDataAdapter(sqlSelect, cn);
 dAdapter.InsertCommand = new OleDbCommand("insert into myTable (intColumn, strColumn) values (@intColumn,@strColumn)",cn);
 OleDbParameter param;
 
 param = dAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@intColumn",OleDbType.Integer));
 param.SourceColumn = "intColumn";
 param.SourceVersion = DataRowVersion.Current;

 param = dAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@strColumn",OleDbType.VarChar));
 param.SourceColumn = "strColumn";
 param.SourceVersion = DataRowVersion.Current;

//наш DataSet
 DataSet ds = new DataSet("myDataSet");
 try
 {
//заполняем DataSet
  dAdapter.Fill(ds, "myTable");
 }
 catch(Exception ex)
 {
  Console.WriteLine(ex.Message);
 }
 Console.WriteLine("Before..");
 PrintTable(ds,"myTable");
//выводим нашу таблицу
 DataRow myRow;
//добавляем строки в DataSet
 for (int i=0; i<3; i++)
 {
  myRow = ds.Tables["myTable"].NewRow();
  myRow["intColumn"] = i;
  myRow["strColumn"] = "It works!";
  ds.Tables["myTable"].Rows.Add(myRow);
 }
 try
 {
//обновляем БД и выводим итог
  dAdapter.Update(ds,"myTable");
  ds.Dispose();
  ds = new DataSet();
  dAdapter.Fill(ds,"myTable");
  PrintTable(ds,"myTable");
 }
 catch(Exception ex)
 {
  Console.WriteLine(ex.Message);
 }
 finally
 {
//закрываем соединение..
  cn.Close();
 }

 
 Console.Read();
 Console.Read();
}
}


Все. Надеюсь, этот код чем-то помог.
Удачи!

З.Ы. Пример готов к компиляции. Можно откомпилить и запустить..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Finkel
Дата 12.5.2004, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



фух , минут тридцать сравнивал обьявления параметров smile.gif.. я думал сначала их нада обозвать , а оказывается нет ..
PM MAIL   Вверх
Kurt
Дата 12.5.2004, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Немножко не понял, что ты имеешь ввиду..
Извини, что запутал - я наоборот старался, чтоб поаккуратнее, да попроще..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Finkel
Дата 13.5.2004, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хм, а как можно сделать :
на одной форме критерии и поиск таблицы , а результат передать в другую форму в DataGrid ?
PM MAIL   Вверх
Kurt
Дата 13.5.2004, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Модератор: Давайте вернёмся к теме обсуждения.

Если хочешь задать другой вопрос, настоятельно рекомендую создать НОВУЮ тему с соответствующим названием.
Таким образом, ты привлечешь внимание тех, кто знает ответ.
А также это соответствует правилам форума.
1 топик - 1 вопрос. wink.gif


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Finkel
Дата 18.5.2004, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот пробывал добавить в свою базу строку
Код

OleDbConnection cn =new OleDbConnection();
  cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"+@"Data source = D:\db1.mdb";
  cn.Open();
  string sqlSelect="select * from prihodniy_order";
  OleDbDataAdapter MyAdapter = new OleDbDataAdapter(sqlSelect,cn);
           MyAdapter.InsertCommand=new OleDbCommand("insert into Rashodniy_order(Order_id,Schet,Prinyato,Summa,Osnovanie,Month,Day) values (@Order_id,@Schet,@Prinyato,@Summa,@Osnovanie,@Month,@Day)");
 
  OleDbParameter param;
  param = MyAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@Order_id",OleDbType.Integer));
  param.SourceColumn="Order_id";
  param.SourceVersion=DataRowVersion.Current;
 
 
  param = MyAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@Schet",OleDbType.Integer));
  param.SourceColumn="Schet";
  param.SourceVersion=DataRowVersion.Current;
 
  param = MyAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@Prinyato",OleDbType.VarChar));
  param.SourceColumn="Prinyato";
  param.SourceVersion=DataRowVersion.Current;
 
  param = MyAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@Summa",OleDbType.Double));
  param.SourceColumn="Summa";
  param.SourceVersion=DataRowVersion.Current;
 
 
  param = MyAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@Osnovanie",OleDbType.VarChar));
  param.SourceColumn="Osnovanie";
  param.SourceVersion=DataRowVersion.Current;
 
  param = MyAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@Month",OleDbType.Integer));
  param.SourceColumn="Month";
  param.SourceVersion=DataRowVersion.Current;
 
  param = MyAdapter.InsertCommand.Parameters.Add(new OleDbParameter("@Day",OleDbType.Integer));
  param.SourceColumn="Day";
  param.SourceVersion=DataRowVersion.Current;
 
  if((int.Parse(textBox5.Text)<0) & (int.Parse(textBox5.Text)>31)) { MessageBox.Show("Uncorrect Date");
         textBox5.Text="";
         textBox6.Text="";
        }

  if((int.Parse(textBox6.Text)<0) & (int.Parse(textBox6.Text)>12))
  {
    MessageBox.Show("Uncorrect Date");
   textBox5.Text="";
   textBox6.Text="";
  }
  DataSet Ds= new DataSet("Prihodniy_order");
  MyAdapter.Fill(Ds,"Prihodniy_order");
  DataRow Myrow;
  Myrow= Ds.Tables["Prihodniy_order"].NewRow();
  Myrow["Order_id"]=int.Parse(textBox1.Text);
  Myrow["Schet"]=int.Parse(textBox2.Text);
  Myrow["Prinyato"]=textBox3.Text;
  double Dbl = double.Parse(textBox7.Text);
  Myrow["Summa"]=Dbl;
  Myrow["Osnovanie"]=textBox4.Text;
  Myrow["Month"]=int.Parse(textBox6.Text);
           Myrow["Day"]=int.Parse(textBox5.Text);
  Ds.Tables["Prihodniy_order"].Rows.Add(Myrow);
  try
  {
   MyAdapter.Update(Ds, "Prihodniy_order");
  }
  catch( Exception Ex)
  {
   MessageBox.Show("Exeption"+Ex);
  }
  Ds.Dispose();
  Close();
 }



возникает прирывание , в котором говорится что не инициализирована Инсерт-операция .
В чем яне прав , все сделал по примеру Курта.
PM MAIL   Вверх
Kurt
Дата 18.5.2004, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Цитата
В чем яне прав , все сделал по примеру Курта.

Хмммм.. Да. Действительно похоже.. Однако, говоришь, не работает..
Смотрим.. Стоп!
..А ЭТО что?!
Сравним две строчки кода.

Твой код:
Цитата
MyAdapter.InsertCommand=new OleDbCommand("insert into Rashodniy_order(Order_id,Schet,Prinyato,Summa,Osnovanie,Month,Day) values (@Order_id,@Schet,@Prinyato,@Summa,@Osnovanie,@Month,@Day)");


Мой пример:
Цитата
dAdapter.InsertCommand = new OleDbCommand("insert into myTable (intColumn, strColumn) values (@intColumn,@strColumn)",cn);


Чувствуешь разницу? У тебя нету второго параметра в конструкторе! Очевидно, просто конструктор перегружен - считается, что ты определишь этот параметр позже или из еще каких-то соображений. Попробуй указать вторым параметров твой OleDbConnection cn; Как у меня в примере.
Поидее, всю будет работать..
Опробуй и доложи о результатах - если нет, дальше будем искать..
Удачи! smile.gif

З.Ы. Попутно.. Не подумай ничего такого, но вроде вместо "Uncorrect" надо писать "Incorrect".. А, можь, и нет..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Finkel
Дата 18.5.2004, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Возникает ексепшн с вот таким текстом
"ExceptionSystem.Data.OleDb.OleDb.Exception ошибка ситаксиса инструкции INSERT INTO,
at System.Data.comon.DbDataAdapter.Update(DataRow[] dataRow,DataTableMapping tableMapping )
at System.Data.comon.DbDataAdapter.Update(DataSet dataset,String srcTable)
at ..."

єто опять с Инсертом как то связано?
PM MAIL   Вверх
Finkel
Дата 19.5.2004, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



может я ошибся изменив регистр букв ? Важно ли это для SQL Запроса?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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