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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разные типы данных в зависимости от условия, Нужна работа с разными типами данных 
:(
    Опции темы
href
Дата 15.3.2010, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хочу сделать простую вещь: чтоб один и тот же функционал работал и под SQL Express Edition и под SQL Compact Edition. Соответственно, нужно создавать либо экземпляр класса SqlCommand, либо SqlCeCommand. Пробую делать так:

Код

if (SQLConnectToServer) {
   SqlCommand cmd = connSrv.CreateCommand();
} else {
   SqlCeCommand cmd = conn.CreateCommand();
}

cmd.Parameters.Add("@guid", SqlDbType.UniqueIdentifier);
...


Но следующее же после условия обращение к cmd ругается "Невозможно объявить локальную переменную с именем 'cmd' в этой области видимости...".

По отдельности без условия с каждой из строчек код работает нормально.

Подскажите, пожалуйста, как можно решить эту проблему?

Это сообщение отредактировал(а) href - 15.3.2010, 17:06
PM MAIL WWW ICQ Skype GTalk   Вверх
azesmcar
Дата 15.3.2010, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



href

Используй базовый тип DBCommand для обоих.
PM   Вверх
href
  Дата 15.3.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



azesmcar

спасибо!! больше не ругается. правда, синтаксис приходится править 
PM MAIL WWW ICQ Skype GTalk   Вверх
Kanes
Дата 16.3.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть еще удобный класс: System.Data.Common.DbProviderFactory
--------------------
Big gun - big future  
PM MAIL   Вверх
href
Дата 31.3.2010, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Kanes, According to the MSDN documentation, the DbProviderFactories class is not available in the Compact Framework 
http://social.msdn.microsoft.com/Forums/en...d7-f9ae9ee6a309
PM MAIL WWW ICQ Skype GTalk   Вверх
href
  Дата 31.3.2010, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



azesmcar, рано радовался: проблема вылезла теперь в другом месте.

Код

DbConnection DbConn = new SqlCeConnection(connectionString);
DbConn.Open();
...
DbCommand cmd;
cmd = DbConn.CreateCommand();
...
SqlParameter currentParam = new SqlParameter();
...
cmd.Parameters.Add(currentParam); 

при добавлении параметра ругается: "SqlCeParameterCollection допускает использование только непустых объектов типа SqlCeParameter, но не объектов SqlParameter."

 smile 


Это сообщение отредактировал(а) href - 31.3.2010, 16:50
PM MAIL WWW ICQ Skype GTalk   Вверх
Ceiceron
Дата 31.3.2010, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



советую посмотреть в сторону патерна проектирования "Стратегия". Т.е. создать два класса с функция для работы с БД под SQL Express Edition и под SQL Compact Edition, как бы все операции с БД заворачиваешь в них. Потом на определенном этапе работы программы определяем какая стратегия тебе нужна и используем нужные функции, в которых все заточено уже под конкретную СУБД.

Примерно так:
Код

BaseStrategy strategy=null; //базовая стратегия имеет прототипы всех функций для получения данных (обычно это абстрактный класс, можно даже интерфейс)
if (SQLConnectToServer) {
   strategy = new SQLExpressStrategy(); //стратегия работы с SQL Express Edition
} else {
    strategy = new SQLCompactStrategy();  //стратегия работы с SQL Compact Edition
}

//cmd.Parameters.Add("@guid", SqlDbType.UniqueIdentifier); - это все упаковано в классы стратегий
//...
SomeObj obj=strategy.GetMyData(); //тут получаем какие нужно данные

Подозреваю, что придется ввести где-то дополнительный слой абстракции, что бы отделить типизацию данных от БД.
Про паттерн читай гугл.

Это сообщение отредактировал(а) Ceiceron - 31.3.2010, 22:10
PM MAIL   Вверх
jonie
Дата 4.4.2010, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



.. а лучше заюзать готовый DAL вроде NHibernate


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

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


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

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


 




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


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

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