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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> c# Несколько вопросов по LinqToSQL, Перевод запросов 
:(
    Опции темы
WantToProg
Дата 10.6.2010, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброе время суток. Помогите пожалуйста перевести запросы SQL в язык Link.
 Запросы следующие:
Код

"UPDATE Units SET Cde = '" + variable1 + "', Name = '" + variable2 + "', Price = '" + variable3 + "', QTY = '" + variable4 + "' WHERE Cde = '" + variable1 + "' ";

"INSERT INTO Units (Cde, Name, Price, QTY) VALUES('" + variable1 + "','" + variable2 + "','" + variable3 + "','" + variable4 + "')"

"DELETE from Barcodes WHERE Barcode = '" + variable5 + "'"

"SELECT TOP 1 * FROM BARCODES inner join UNITS on Barcodes.[Cde]=Units.[Cde] WHERE Barcode LIKE '"  + textBox1.Text + "%'";


И что заменяет результат выполнения запроса:
Код

int result = comm.ExecuteNonQuery();


PS: Очень надеюсь на вашу помощь. Сам к сожалению не могу справиться, уже день потратил, не работают запросы :(
PM MAIL   Вверх
Любитель
Дата 10.6.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


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

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



1. Нельзя так "переводить".
2. В линке нету батч модификаций.
3. Если нужен "перевод" - то только хранимки.
4. Насчёт второй части. Смотрим пункт 2. С пунктом 3 - @@rowcount.
5. Про SQL-инъекции вы, конечн, не слышали?


--------------------
PM MAIL ICQ Skype   Вверх
Выхухоль
Дата 11.6.2010, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Любитель @  10.6.2010,  21:29 Найти цитируемый пост)
1. Нельзя так "переводить".
2. В линке нету батч модификаций.
3. Если нужен "перевод" - то только хранимки.
4. Насчёт второй части. Смотрим пункт 2. С пунктом 3 - @@rowcount.
5. Про SQL-инъекции вы, конечн, не слышали? 


Вы щас своим ответом пытались помоч человеку или показать свою невъ**нность?


как понять в линке нет батч модификаций??? даже мне прогеру с 4-хлетним опытов в .NET нифига эта враза в данном контексте не понятна

Цитата(Любитель @  10.6.2010,  21:29 Найти цитируемый пост)
 3. Если нужен "перевод" - то только хранимки.

хрень, хранимки следует использовать только при изменении данных, а тут и выборочный  запрос имеется...

Цитата(Любитель @  10.6.2010,  21:29 Найти цитируемый пост)
 5. Про SQL-инъекции вы, конечн, не слышали? 

какие инъекции, в LINQ???? вы когда последний раз видели чтобы кто то инекцию в линке провел?


Для того чтобы получить анологию с вышеуказанными запросами следует в первую очередь создать Linq To SQL Classes.dbml слой данных, это спец Item который добавляеться в проект как и все остальные.

При создании этого объекта к нему вы укажете подключение к базе, и на этот слой будете закидывать данные в виде таблиц вьюшек и хранимых процедур.

после этого вы используете объект созданного вами  Linq To SQL Classes класса, который в себе будет содержать весь слой данных который вы на него поместили.

к примеру, все таблицы участвующие в описанном выми запросах уже есть в этом слое данных:

Код

using(LinqToSqlDbContext Mycon = new LinqToSqlDbContext ())
{
//выборка данных
var SelectReq = (from i in Mycon.BARCODES select i).Join(Mycon.Units, e=>e.Cde,o=>o.Cde, (m,j)=>new {Cde = m.Cde, UnitID = j.UnitID, Barcode = m.Barcode, Name =j.Name, Price =j.Price, QTY =j.QTY   }).Where(i=>i.Barcode.Conteins(textBox1.Text)).First();
//насчет изменения данных, счиатеся правленым делать это через создание хранимых процедур в БД и перекидывания их на наш слой данных, но если нет конкретных условий безопасности и объемы информации проходящей изменения не будут тормозить всю производительность приложения можно не париться и смело писать вот так:

//1. Deleting

var DeleteRow = (from i in Mycon.BARCODES  where i.Barcode == variable5 select i).FirstOrDefault();//это только при условии отной строки на удаление
Mycon.DeleteOnSubmit(DeleteRow ); //для удаления множетсва строк применяется другой метод

//2. Updating 

var UpdatedRow = (from in in Mycon.Units where i.Cde==variable1 select i).FirstOrDefault();
UpdatedRow .Name  = variable2 ;
UpdatedRow .Price = variable3 ;
UpdatedRow .QTY = variable4 ; //изменения произойдут при вызове метода SubmitChanges данного объекта контекста 

//3. inserting

var InsertedRow = new Unit();
InsertedRow .Cde= variable1 ;
InsertedRow .Name  = variable2 ;
InsertedRow .Price = variable3 ;
InsertedRow .QTY = variable4 ;

Mycon.InsertOnSubmit(InsertedRow);

// и последнее для выполнения все этих операций (изменения, выборка осуществляеться автоматически при получения данных из запроса) нужно засабмитить все это дело

Mycon. SubmitChanges();

// и вуо-ля...
}



канечно я не дал полную исчерпывающую информацию, но зато четко ответил на поставленный вами вопрос, пробуйте, докапывайте, советую читать все таки литературы, а уже потом выполнять какие либ действия на практике

Это сообщение отредактировал(а) Выхухоль - 11.6.2010, 14:11
PM MAIL ICQ   Вверх
Любитель
Дата 11.6.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


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

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



Во-первых, ещё раз. Я говорил о том, что нельзя переводить. Т. е. вот этому куску соответствует то, вот этому - то. Я не говорил о том, что нельзя решить аналогичные бизнес-задачи.

Цитата(Выхухоль @  11.6.2010,  13:57 Найти цитируемый пост)
как понять в линке нет батч модификаций??? даже мне прогеру с 4-хлетним опытов в .NET нифига эта враза в данном контексте не понятна

Ээ.. Набираем batch update linq, скажем, и смотрем кучу вопросов. Речь о том, чтобы одним запросом вставить, удалить или обновить много данных. В линке этого нельзя.

Цитата(Выхухоль @  11.6.2010,  13:57 Найти цитируемый пост)
хрень, хранимки следует использовать только при изменении данных, а тут и выборочный  запрос имеется...

Ещё раз - пункт 1. Я говорил о том, чтобы предложить "ниверсальный алгоритм перевода". А вообще, "только при изменении" - это даж не смешно. Как вы собрались всякие иерархические запросы, window-функции и сложные агрегации делать?!

Цитата(Выхухоль @  11.6.2010,  13:57 Найти цитируемый пост)

к примеру, все таблицы участвующие в описанном выми запросах уже есть в этом слое данных:

Ещё такой момент - очень неудачная идея миксить query и учеутышщт синтаксисы. Тем более так дико.


--------------------
PM MAIL ICQ Skype   Вверх
WantToProg
Дата 14.6.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Любитель, к сожалению, я действительно не понял что вы имеете ввиду. Я не знаю, что такое батч-модификации и sql-инъекции. Обещаю, что поищу в интернете описание ;)
Выхухоль, Большое спасибо, вы меня направили в нужную сторону. Кроме того, нашел еще такую ссылку (прошу прощения, что раньше не внимательно искал) 
http://msdn.microsoft.com/ru-ru/library/bb882643(VS.90).aspx

За выборку отдельное спасибо. Если остальные процедуры я могу заменить прямыми командами SQL, то с выборкой была проблема

Остался вопрос с результатом выполнения запроса
Код

int result = comm.ExecuteNonQuery();

ExecuteNonQuery() возвращает 1 или 0, что позволяет понять произошел update, delete или insert. Чем заменяют это в LinqToSQL?


PS: А еще я походу вопрос поставил не корректно. Все запросы описанные в первом посте не надо было делать подряд. Мне в разных частях кода необходимо их делать smile Я хотел разобраться как делать update, insert, delete и select, и возвращать результат выполнения в языке LinqToSQL.

Это сообщение отредактировал(а) WantToProg - 14.6.2010, 09:58
PM MAIL   Вверх
Ram1reS
Дата 14.6.2010, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

ExecuteNonQuery() возвращает 1 или 0, что позволяет понять произошел update, delete или insert. Чем заменяют это в LinqToSQL?

Ловлей Exceptiona'a при DataContext.SaveChanges()
--------------------
 
PM MAIL ICQ   Вверх
WantToProg
Дата 15.6.2010, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Ram1reS @  14.6.2010,  23:05 Найти цитируемый пост)
Ловлей Exceptiona'a при DataContext.SaveChanges() 

Вы имели ввиду SubmitChanges()? Так при Update исключения нет. Или я не внимательно смотрю?
Пока что, я решил сделать таким образом. Не уверен, что он правильный.
Создаю таблицу в базе с ключевым полем. Потом произвожу INSERT и в случае Exception, UPDATE.

Это сообщение отредактировал(а) WantToProg - 15.6.2010, 07:36
PM MAIL   Вверх
Ram1reS
Дата 15.6.2010, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, SubmitChanges() конечно же =)

Смотрим тут
Цитата

В данный момент любые ошибки, обнаруженные базой данных, приводят к остановке процесса отправки и вызову исключения.Выполняется откат всех изменений базы данных к состоянию до начала отправки. Класс DataContext по-прежнему содержит запись всех изменений.

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

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

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

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


 




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


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

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