Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
JoKeR Почетный активист проекта
Зарегистрирован: 09.12.2008 Сообщения: 393
|
Добавлено: Пт Мар 27, 2009 13:33 27.03.2009 Заголовок сообщения: Программирование на C# |
|
|
Доброго времени суток.
Решил попробовать силы на этом ужасно замечательном языке C#.
Работаю на Делфи - я зык супер, все понятно....но шарп это какой-то КОШМАР .
Помогите разобраться с БД.
Задачка очень простая (на Делфи в три строчки) надо в уже существующей базе создать динамически новую таблицу. Как это проще реализовать? |
|
Вернуться к началу |
|
|
Michael Руководитель проекта
Зарегистрирован: 12.10.2005 Сообщения: 2488 Откуда: Москва
|
Добавлено: Пт Мар 27, 2009 15:58 27.03.2009 Заголовок сообщения: |
|
|
Цитата: | шарп это какой-то КОШМАР |
Так ничего не получится. Надо исходить из соображения "Шарп классный язык, но я его еще не освоил".
Работа с базой происходит как-то так:
// Открываем соединение с БД через OleDb
System.Data.OleDb.OleDbConnection DBConn = new OleDbConnection();
DBConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Password='';User ID=Admin;Data Source=" + Application.StartupPath + "\filename.mdb;Mode=Share Deny None;Extended Properties='';Jet OLEDB:System database='';Jet OLEDB:Registry Path='';Jet OLEDB:Database Password=;Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password='';Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
DBConn.Open();
// Описываем SQL запрос, например, для создания таблицы
OleDbCommand myCmd = new OleDbCommand("", DBConn);
myCmd.CommandText = "CREATE TABLE TableName (Column1 INT, Columnt2 Text(100) NULL)";
// Выполняем этот SQL
myCmd.ExecuteNonQuery();
// Закрываем соединение с БД
DBConn.Close();
Код не проверял, набросал на основе исходного на VB. SQL может быть любым, хоть создание таблицы, хоть удаление, хоть изменение. Выполнение SQL лучше обернуть в try-catch, а если выполняется несколько подряд, то использовать транзакцию.
И на этом сайте неплохой форум по программированию: www.gotdotnet.ru
Успехов! |
|
Вернуться к началу |
|
|
JoKeR Почетный активист проекта
Зарегистрирован: 09.12.2008 Сообщения: 393
|
Добавлено: Пт Мар 27, 2009 16:53 27.03.2009 Заголовок сообщения: |
|
|
Вкралась ошибка
Цитата: | Application.StartupPath + "\filename.mdb; |
Надо два слеша ставить
Application.StartupPath + "\\filename.mdb; |
|
Вернуться к началу |
|
|
JoKeR Почетный активист проекта
Зарегистрирован: 09.12.2008 Сообщения: 393
|
Добавлено: Пт Мар 27, 2009 17:26 27.03.2009 Заголовок сообщения: |
|
|
Пишу так:
Код: | // Открываем соединение с БД через OleDb
System.Data.OleDb.OleDbConnection DBConn = new OleDbConnection();
DBConn.ConnectionString = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=" + Application.StartupPath + "\\prjBase.sdf";
DBConn.Open();
// Описываем SQL запрос, например, для создания таблицы
OleDbCommand myCmd = new OleDbCommand("", DBConn);
myCmd.CommandText = "CREATE TABLE tabName (Column1 INT, Columnt2 varchar(100) NULL)";
// Выполняем этот SQL
myCmd.ExecuteNonQuery(); |
И все равно ошибка :
Цитата: | Указан недопустимый тип данных. [,,,Data type (if known),, |
|
|
Вернуться к началу |
|
|
Michael Руководитель проекта
Зарегистрирован: 12.10.2005 Сообщения: 2488 Откуда: Москва
|
Добавлено: Сб Мар 28, 2009 1:18 28.03.2009 Заголовок сообщения: |
|
|
Если работать с SQL-сервером, то подключение происходит по-другому. Там уже нельзя напрямую к файлу обращаться. Строка подключения тогда такая:
DBConn.ConnectionString = "Provider=sqloledb;Server=" + Server + ";Database=" + Database + ";User Id=" + Login + ";Password=" + Pass + ";";
Где соответстенно:
Server - имя сервера в сети, можно IP
Database - имя БД на этом сервере
Login и Pass - логин и пароль
Все остальное так же, как и с MDB. Только синтаксис SQL у них немного разный, ну и возможности тоже. |
|
Вернуться к началу |
|
|
JoKeR Почетный активист проекта
Зарегистрирован: 09.12.2008 Сообщения: 393
|
Добавлено: Пн Мар 30, 2009 10:14 30.03.2009 Заголовок сообщения: |
|
|
я локальную базу использую |
|
Вернуться к началу |
|
|
Michael Руководитель проекта
Зарегистрирован: 12.10.2005 Сообщения: 2488 Откуда: Москва
|
Добавлено: Пн Мар 30, 2009 11:42 30.03.2009 Заголовок сообщения: |
|
|
Тогда в качестве имени сервера надо указать локальный IP, либо localhost, либо 127.0.0.1. |
|
Вернуться к началу |
|
|
JoKeR Почетный активист проекта
Зарегистрирован: 09.12.2008 Сообщения: 393
|
Добавлено: Вт Мар 31, 2009 12:07 31.03.2009 Заголовок сообщения: |
|
|
Я прошу прощение за занудство.
Я пытаюсь подключиться к стандартной базе prjBase.sdf, которая лежит в том же каталоге, что и прога. в БД я сделал 1 табличку.
В этом случае все равно необходимо подключаться с использованием указания сервера? |
|
Вернуться к началу |
|
|
Michael Руководитель проекта
Зарегистрирован: 12.10.2005 Сообщения: 2488 Откуда: Москва
|
Добавлено: Вт Мар 31, 2009 23:25 31.03.2009 Заголовок сообщения: |
|
|
Access - это файл-серверная архитектура. Клиент имеет прямой доступ к файлу и средствами файловой системы тянет из него данные.
SQL-сервер - это клиент-серверная архитектура. Клиент делает запрос к данным, сервер обрабатывает запрос и возвращает клиенту чистые упорядоченные данные. С файлом клиент не работает и даже не знает, где он находится и какая у него структура. Такая схема позволяет улучшить множество узких мест файл-серверной архитектуры, в первую очередь повысить быстродействие БД.
Поэтому подключаться надо, указывая сервер. |
|
Вернуться к началу |
|
|
SergeyK
Зарегистрирован: 09.11.2010 Сообщения: 21
|
Добавлено: Пн Янв 17, 2011 11:37 17.01.2011 Заголовок сообщения: |
|
|
Если не секрет, на чем написана сама программа (PrintStore)? |
|
Вернуться к началу |
|
|
Michael Руководитель проекта
Зарегистрирован: 12.10.2005 Сообщения: 2488 Откуда: Москва
|
Добавлено: Пн Янв 17, 2011 12:02 17.01.2011 Заголовок сообщения: |
|
|
Не секрет. Основной движок на C#, часть кода пока осталась на VB, мы его постепенно переводим тоже на C#. _________________ Любой путь начинается с первого шага |
|
Вернуться к началу |
|
|
JoKeR Почетный активист проекта
Зарегистрирован: 09.12.2008 Сообщения: 393
|
Добавлено: Пн Янв 17, 2011 13:23 17.01.2011 Заголовок сообщения: |
|
|
может встречал такую вещь.... Fast CSV Reader (http://www.codeproject.com/KB/database/CsvReader.aspx)
Вроде нечего сложного
Код: | using (CsvReader csv =
new CsvReader(new StreamReader("data.csv"), true))
{
csv.ReadNextRecord();
}
|
работает. стоит добавить параметр разделителя
Код: | using (CsvReader csv =
new CsvReader(new StreamReader("data.csv"), true, ';'))
{
csv.ReadNextRecord();
}
|
sдаёт ошибку, что уже зарегистрировано имя |
|
Вернуться к началу |
|
|
Michael Руководитель проекта
Зарегистрирован: 12.10.2005 Сообщения: 2488 Откуда: Москва
|
Добавлено: Пн Янв 17, 2011 13:46 17.01.2011 Заголовок сообщения: |
|
|
JoKeR
С Fast CSV Reader не сталкивался. По ошибке надо смотреть полное ее описание. А вообще, там же исходники должны быть, надо в них покопаться. _________________ Любой путь начинается с первого шага |
|
Вернуться к началу |
|
|
SergeyK
Зарегистрирован: 09.11.2010 Сообщения: 21
|
Добавлено: Пн Янв 17, 2011 14:51 17.01.2011 Заголовок сообщения: |
|
|
То есть C# таки лучше VB? |
|
Вернуться к началу |
|
|
Michael Руководитель проекта
Зарегистрирован: 12.10.2005 Сообщения: 2488 Откуда: Москва
|
Добавлено: Пн Янв 17, 2011 16:06 17.01.2011 Заголовок сообщения: |
|
|
SergeyK писал(а): | То есть C# таки лучше VB? |
Если кратко, то C# - более структурированный и строгий (меньше допускает разночтений). VB проще, и из-за этого на нем легче научиться писать и сам код пишется быстрее. Но технология NET так устроена, что программа, написанная на любом языке, прекомпилируется в один и тот же промежуточный код, который уже затем на компе пользователя компилируется в бинарный код. В результате программа, реализованная одинаковыми алгоритмами на VB и на C#, будет исполняться одинаково по скорости, т.е. результат будет одинаков. _________________ Любой путь начинается с первого шага |
|
Вернуться к началу |
|
|
|