FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Программирование на C#
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов PrintStore.ru - система учета расходных материалов -> Обмен опытом
Предыдущая тема :: Следующая тема  
Автор Сообщение
JoKeR
Почетный активист проекта


Зарегистрирован: 09.12.2008
Сообщения: 393

СообщениеДобавлено: Пт Мар 27, 2009 13:33 27.03.2009    Заголовок сообщения: Программирование на C# Ответить с цитатой

Доброго времени суток.

Решил попробовать силы на этом ужасно замечательном языке C#.
Работаю на Делфи - я зык супер, все понятно....но шарп это какой-то КОШМАР Twisted Evil .

Помогите разобраться с БД.
Задачка очень простая (на Делфи в три строчки) надо в уже существующей базе создать динамически новую таблицу. Как это проще реализовать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Michael
Руководитель проекта


Зарегистрирован: 12.10.2005
Сообщения: 2487
Откуда: Москва

СообщениеДобавлено: Пт Мар 27, 2009 15:58 27.03.2009    Заголовок сообщения: Ответить с цитатой

Цитата:
шарп это какой-то КОШМАР

Так ничего не получится. Надо исходить из соображения "Шарп классный язык, но я его еще не освоил". Wink

Работа с базой происходит как-то так:

// Открываем соединение с БД через 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
Сообщения: 2487
Откуда: Москва

СообщениеДобавлено: Сб Мар 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
Сообщения: 2487
Откуда: Москва

СообщениеДобавлено: Пн Мар 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
Сообщения: 2487
Откуда: Москва

СообщениеДобавлено: Вт Мар 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
Сообщения: 2487
Откуда: Москва

СообщениеДобавлено: Пн Янв 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
Сообщения: 2487
Откуда: Москва

СообщениеДобавлено: Пн Янв 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
Сообщения: 2487
Откуда: Москва

СообщениеДобавлено: Пн Янв 17, 2011 16:06 17.01.2011    Заголовок сообщения: Ответить с цитатой

SergeyK писал(а):
То есть C# таки лучше VB?

Если кратко, то C# - более структурированный и строгий (меньше допускает разночтений). VB проще, и из-за этого на нем легче научиться писать и сам код пишется быстрее. Но технология NET так устроена, что программа, написанная на любом языке, прекомпилируется в один и тот же промежуточный код, который уже затем на компе пользователя компилируется в бинарный код. В результате программа, реализованная одинаковыми алгоритмами на VB и на C#, будет исполняться одинаково по скорости, т.е. результат будет одинаков.
_________________
Любой путь начинается с первого шага
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов PrintStore.ru - система учета расходных материалов -> Обмен опытом Часовой пояс: GMT + 4
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group