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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление связанных объектов, LINQ to SQL 
V
    Опции темы
Red Wind
Дата 25.3.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброго времени суток!
Начал изучать LINQ to SQL. И сразу же наткнулся на неприятную особенность. После удаления каждого объекта например northwind.Orders.DeleteAllOnSubmit(customer.Orders) нужно вызывать метод northwind.SubmitChanges() То есть если я сначала вызову northwind.Orders.DeleteAllOnSubmit(customer.Orders) потом northwind.Customers.DeleteOnSubmit(customer) а уже после этого northwind.SubmitChanges() то падает ошибка:
Код

The DELETE statement conflicted with the REFERENCE constraint "FK_Orders_Customers". The conflict occurred in database "Nothwind", table "dbo.Orders", column 'CustomerID'.

Вот код который работает. Но мне не нравиться то что нужно два раза вызывать метод northwind.SubmitChanges(); Как этого избежать?
Код

        private static void DeleteCustomer(string id)
        {
            var customer = (from c in northwind.Customers
                            where c.CustomerID == id
                            select c).Single();

            northwind.Orders.DeleteAllOnSubmit(customer.Orders);
            try
            {
                northwind.SubmitChanges();
                Console.WriteLine(String.Format("Customer {0} deleted", id));
            }
            catch (ChangeConflictException)
            {
                northwind.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);
            }

            northwind.Customers.DeleteOnSubmit(customer);
            try
            {
                northwind.SubmitChanges();
                Console.WriteLine(String.Format("Customer {0} deleted", id));
            }
            catch (ChangeConflictException)
            {
                northwind.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);
            }
        }

PM MAIL ICQ   Вверх
Idsa
Дата 25.3.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Посмотрите, какое Delete-правило выставлено для FK из Customers.CustomerId в Orders.CustomerId.

Это сообщение отредактировал(а) Idsa - 25.3.2009, 19:56


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Red Wind
Дата 25.3.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Delete rule: No Action.
PM MAIL ICQ   Вверх
Idsa
Дата 25.3.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Red Wind, приведите код из профайлера при неработающем подходе. Такое ощущение, что Linq To Sql сначала отдает команду на удаление заказчика (и тут, естественно, возникает конфликт), а потом уже команду удаления заказов (хотя до этого не доходит).


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Red Wind
Дата 25.3.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это понятно. Но дело в том, что это пример из книги, на бд которая шла вместе с книгой. И там всё работало с одним вызовом SubmitChanges. То есть я подумал, что linq to sql должен сам разруливать такие вещи. 
Профайлера на этой машине у меня нет. Вот последнее сообщение которое выдаёт DataContext.Log:
Код

DELETE FROM [dbo].[Customers] WHERE ([CustomerID] = @p0) AND ([CompanyName] = @
1) AND ([ContactName] = @p2) AND ([ContactTitle] = @p3) AND ([Address] = @p4) A
D ([City] = @p5) AND ([Region] = @p6) AND ([PostalCode] = @p7) AND ([Country] =
@p8) AND ([Phone] = @p9) AND ([Fax] = @p10)
-- @p0: Input NChar (Size = 5; Prec = 0; Scale = 0) [LAWN ]
-- @p1: Input NVarChar (Size = 14; Prec = 0; Scale = 0) [Lawn Wranglers]
-- @p2: Input NVarChar (Size = 13; Prec = 0; Scale = 0) [Mr. Abe Henry]
-- @p3: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [Owner]
-- @p4: Input NVarChar (Size = 19; Prec = 0; Scale = 0) [1017 Maple Leaf Way]
-- @p5: Input NVarChar (Size = 9; Prec = 0; Scale = 0) [Ft. Worth]
-- @p6: Input NVarChar (Size = 2; Prec = 0; Scale = 0) [TX]
-- @p7: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [76104]
-- @p8: Input NVarChar (Size = 3; Prec = 0; Scale = 0) [USA]
-- @p9: Input NVarChar (Size = 14; Prec = 0; Scale = 0) [(800) MOW-LAWN]
-- @p10: Input NVarChar (Size = 14; Prec = 0; Scale = 0) [(800) MOW-LAWO]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1

Так что да, сначала удаляется Customers.
PM MAIL ICQ   Вверх
Idsa
Дата 25.3.2009, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Хех... Это какой-то идиотизм. LINQ To SQL, конечно, не отличается особой смышленностью... но уж порядок Delete'ов-то должен соблюдаться.
P. S. Задумался, а не глюканет ли на этом примере EF...


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
PashaPash
Дата 25.3.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Red Wind, поставь каскадное удаление и удаляй только кастомера


--------------------
PM MAIL WWW   Вверх
Idsa
Дата 25.3.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



PashaPash, это да... но ведь, согласись, ORM должна соблюдать порядок выполнения операций.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
PashaPash
Дата 25.3.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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


--------------------
PM MAIL WWW   Вверх
Idsa
Дата 25.3.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(PashaPash @  26.3.2009,  03:00 Найти цитируемый пост)
Idsa, наоборот, не должна - вряд ли ORM может правильно разрешить циклические зависимости. 

Вот кусочек из реальной EF-модели:
Код

<Association Name="FK_CopiedObjects_Persons">
          <End Role="Persons" Type="PortalModel.Store.Persons" Multiplicity="1">
            <OnDelete Action="Cascade" />
          </End>
          <End Role="CopiedObjects" Type="PortalModel.Store.CopiedObjects" Multiplicity="*" />
          <ReferentialConstraint>
            <Principal Role="Persons">
              <PropertyRef Name="PersonId" />
            </Principal>
            <Dependent Role="CopiedObjects">
              <PropertyRef Name="PersonId" />
            </Dependent>
          </ReferentialConstraint>
        </Association>

Ключевая строчка - <OnDelete Action="Cascade" />
Но это, насколько я понимаю, всего лишь дает команду удалить дочерние сущности из кэша: запрос на удаление дочерних записей не генерируется (и правильно: эта логика должна быть реализована в самой БД, благо средств для этого предостаточно).

Цитата(PashaPash @  26.3.2009,  03:00 Найти цитируемый пост)
Вот в примере выше - как можно проверять целостность на уровне базы, а требовать соблюдения этой целостности от ORM? 

Так я не требую от ORM соблюдения целостности. Я всего-то требую, чтобы она выполняла команды в том порядке, в котором я их задаю.

Это сообщение отредактировал(а) Idsa - 25.3.2009, 23:10


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Red Wind
Дата 26.3.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(PashaPash @  25.3.2009,  22:25 Найти цитируемый пост)
Red Wind, поставь каскадное удаление и удаляй только кастомера

Не в этом дело. Сейчас я хочу разобратсья как работает LINQ to SQL.
Взял скопипастил код примера из книжки, в котором по большому счёту делается то же самое что и у меня. Этот пример работает. Но принципиальной разницы я не вижу. Так в чём может быть дело?
Код

        static void Listing14_3()
        {
            Console.WriteLine("{0} : Begin", new StackTrace(0, true).GetFrame(0).GetMethod().Name);

            Customer cust =
              new Customer
              {
                  CustomerID = "LAWN",
                  CompanyName = "Lawn Wranglers",
                  ContactName = "Mr. Abe Henry",
                  ContactTitle = "Owner",
                  Address = "1017 Maple Leaf Way",
                  City = "Ft. Worth",
                  Region = "TX",
                  PostalCode = "76104",
                  Country = "USA",
                  Phone = "(800) MOW-LAWN",
                  Fax = "(800) MOW-LAWO",
                  Orders = {
                    new Order {
                      CustomerID = "LAWN",
                      EmployeeID = 4,
                      OrderDate = DateTime.Now,
                      RequiredDate = DateTime.Now.AddDays(7),
                      ShipVia = 3,
                      Freight = new Decimal(24.66),
                      ShipName = "Lawn Wranglers",
                      ShipAddress = "1017 Maple Leaf Way",
                      ShipCity = "Ft. Worth",
                      ShipRegion = "TX",
                      ShipPostalCode = "76104",
                      ShipCountry = "USA"
                    }
                  }
              };

            northwind.Customers.InsertOnSubmit(cust);
            northwind.SubmitChanges();

            Customer customer = northwind.Customers.Where(c => c.CustomerID == "LAWN").First();
            Console.WriteLine("{0} - {1}", customer.CompanyName, customer.ContactName);
            foreach (Order order in customer.Orders)
            {
                Console.WriteLine("{0} - {1}", order.CustomerID, order.OrderDate);
            }

            //  This part of the code merely resets the database so the example can be
            //  run more than once.
            northwind.Orders.DeleteOnSubmit(cust.Orders.First());
            northwind.Customers.DeleteOnSubmit(cust);
            northwind.SubmitChanges();

            Console.WriteLine("{0} : End", new StackTrace(0, true).GetFrame(0).GetMethod().Name);
        }


Это сообщение отредактировал(а) Red Wind - 26.3.2009, 12:43
PM MAIL ICQ   Вверх
PashaPash
Дата 26.3.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Idsa @  25.3.2009,  23:09 Найти цитируемый пост)
Вот кусочек из реальной EF-модели:

EF это не только ORM, это способ получить некую абстрактную модель, которая спрячет за собой все детали работы с базой данных. Т.е. пользоваель EF не знает что там внутри есть база. А пользователь ORM - знает, и должен учитывать ее поведение.
Цитата(Idsa @  25.3.2009,  23:09 Найти цитируемый пост)
Так я не требую от ORM соблюдения целостности. Я всего-то требую, чтобы она выполняла команды в том порядке, в котором я их задаю.

Так и происходит, только DeleteOnSubmit и DeleteAllOnSubmit - разные команды. Если явно удалять Order-ы по одному - они удалятся раньше.


--------------------
PM MAIL WWW   Вверх
Red Wind
Дата 26.3.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(PashaPash @  26.3.2009,  12:46 Найти цитируемый пост)
Так и происходит, только DeleteOnSubmit и DeleteAllOnSubmit - разные команды. Если явно удалять Order-ы по одному - они удалятся раньше.

Интересно. Сейчас попробую. Но почему так происходит? На мой взягляд, принципиальной разницы между DeleteOnSubmit и DeleteAllOnSubmit нет. Тем более в моём случае, DeleteAllOnSubmit удаляет одну запись.

Добавлено через 13 минут и 55 секунд
Не помогло. И заметил такую фишку, что после вызова northwind.Orders.DeleteOnSubmit(customer.Orders.First()) количество Orders у customer не меняется. Разве это правильно?
PM MAIL ICQ   Вверх
PashaPash
Дата 26.3.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Red Wind @  26.3.2009,  13:03 Найти цитируемый пост)
Не помогло. И заметил такую фишку, что после вызова northwind.Orders.DeleteOnSubmit(customer.Orders.First()) количество Orders у customer не меняется. Разве это правильно? 

Присмотрись внимательнее - оно помогло, просто надо удалять еще и Order_Detail. И, кстати, оказалось что Linq To Sql порядок нормально обнаруживает, и DeleteAllOnSubmit и DeleteOnSubmit работают одновременно. Вот тебе 4 примера рабочего кода:
Код

                var context = new DataClasses1DataContext();
                var customer = context.Customers.First();

                foreach (Order order in customer.Orders)
                {
                    foreach (Order_Detail details in order.Order_Details)
                    {
                        context.Order_Details.DeleteOnSubmit(details);
                    }

                    context.Orders.DeleteOnSubmit(order);
                }

                context.Customers.DeleteOnSubmit(customer);

                context.SubmitChanges();

Код

                var context = new DataClasses1DataContext();
                var customer = context.Customers.First();

                context.Customers.DeleteOnSubmit(customer);

                foreach (Order order in customer.Orders)
                {
                    context.Orders.DeleteOnSubmit(order);

                    foreach (Order_Detail details in order.Order_Details)
                    {
                        context.Order_Details.DeleteOnSubmit(details);
                    }
                }

                context.SubmitChanges();

Код

                var context = new DataClasses1DataContext();
                var customer = context.Customers.First();
               
                var id = customer.CustomerID;

                context.Orders.DeleteAllOnSubmit(context.Orders.Where(or => or.CustomerID == id));
                context.Order_Details.DeleteAllOnSubmit(context.Order_Details.Where(od => od.Order.CustomerID == id));
                context.Customers.DeleteOnSubmit(customer);

                context.SubmitChanges();

Код

                var context = new DataClasses1DataContext();
                var customer = context.Customers.First();

                context.Orders.DeleteAllOnSubmit(context.Orders.Where(or => or.Customer == customer));
                context.Order_Details.DeleteAllOnSubmit(context.Order_Details.Where(od => od.Order.Customer == customer));
                context.Customers.DeleteOnSubmit(customer);

                context.SubmitChanges();



--------------------
PM MAIL WWW   Вверх
Red Wind
Дата 27.3.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробовал завести эти примеры. У меня они не работают. Падает точно такая же ошибка как и раньше. Кстати в чём фишка удаления Order_Details? Для Order'а который я удаляю нет Order_Details.
PM MAIL ICQ   Вверх
PashaPash
Дата 27.3.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Red Wind
Какой sql server? 
Какая студия? 
DataContext создаешь новый как в примерах, или спускаешь сверху? Если спускаешь, то зачем?
Если спускаешь, то не факт что customer.Orders лежит актуальная инфа.
Уверен что в спущенном сверху контексте нет order-ов в pending insert для этого кастомера?
Падает именно с ошибкой на FK_Orders_Customers?
Цитата(Red Wind @  27.3.2009,  12:33 Найти цитируемый пост)
Кстати в чём фишка удаления Order_Details? Для Order'а который я удаляю нет Order_Details. 

В стандартной базе nw, от 2000-го сервера, таких order-ов нет.



--------------------
PM MAIL WWW   Вверх
Red Wind
Дата 27.3.2009, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В общем, нашёл причину ошибки. Есть если удалять только что сохранённый объект, то всё ок. А если сначала сохранить кастомера и заказ, потом вычитать кастомера и уже потом удалять, то падает ошибка. Встаёт вопрос, почему так выходит?

Работоспособный код:
Код

        static void Listing14_3()
        {
            Console.WriteLine("{0} : Begin", new StackTrace(0, true).GetFrame(0).GetMethod().Name);

            Customer cust =
              new Customer
              {
                  CustomerID = "LAWN",
                  CompanyName = "Lawn Wranglers",
                  ContactName = "Mr. Abe Henry",
                  ContactTitle = "Owner",
                  Address = "1017 Maple Leaf Way",
                  City = "Ft. Worth",
                  Region = "TX",
                  PostalCode = "76104",
                  Country = "USA",
                  Phone = "(800) MOW-LAWN",
                  Fax = "(800) MOW-LAWO",
                  Orders = {
            new Order {
              CustomerID = "LAWN",
              EmployeeID = 4,
              OrderDate = DateTime.Now,
              RequiredDate = DateTime.Now.AddDays(7),
              ShipVia = 3,
              Freight = new Decimal(24.66),
              ShipName = "Lawn Wranglers",
              ShipAddress = "1017 Maple Leaf Way",
              ShipCity = "Ft. Worth",
              ShipRegion = "TX",
              ShipPostalCode = "76104",
              ShipCountry = "USA"
            }
          }
              };

            northwind.Customers.InsertOnSubmit(cust);
            northwind.SubmitChanges();

            //Customer customer = northwind.Customers.Where(c => c.CustomerID == "LAWN").First();

            northwind.Orders.DeleteOnSubmit(cust.Orders.First());
            northwind.Customers.DeleteOnSubmit(cust);
            northwind.SubmitChanges();

            Console.WriteLine("{0} : End", new StackTrace(0, true).GetFrame(0).GetMethod().Name);
        }


Не рабочий код:
Код

        static void Listing14_3()
        {
            Console.WriteLine("{0} : Begin", new StackTrace(0, true).GetFrame(0).GetMethod().Name);

            Customer cust =
              new Customer
              {
                  CustomerID = "LAWN",
                  CompanyName = "Lawn Wranglers",
                  ContactName = "Mr. Abe Henry",
                  ContactTitle = "Owner",
                  Address = "1017 Maple Leaf Way",
                  City = "Ft. Worth",
                  Region = "TX",
                  PostalCode = "76104",
                  Country = "USA",
                  Phone = "(800) MOW-LAWN",
                  Fax = "(800) MOW-LAWO",
                  Orders = {
            new Order {
              CustomerID = "LAWN",
              EmployeeID = 4,
              OrderDate = DateTime.Now,
              RequiredDate = DateTime.Now.AddDays(7),
              ShipVia = 3,
              Freight = new Decimal(24.66),
              ShipName = "Lawn Wranglers",
              ShipAddress = "1017 Maple Leaf Way",
              ShipCity = "Ft. Worth",
              ShipRegion = "TX",
              ShipPostalCode = "76104",
              ShipCountry = "USA"
            }
          }
              };

            northwind.Customers.InsertOnSubmit(cust);
            northwind.SubmitChanges();

            Customer customer = northwind.Customers.Where(c => c.CustomerID == "LAWN").First();

            northwind.Orders.DeleteOnSubmit(customer.Orders.First());
            northwind.Customers.DeleteOnSubmit(customer);
            northwind.SubmitChanges();

            Console.WriteLine("{0} : End", new StackTrace(0, true).GetFrame(0).GetMethod().Name);
        }


P.S.
БД подкачал отсюда:
http://linqdev.com/PublicPortal/LinkClick....53&mid=1191
This is the extended version of the Northwind database that was initially distributed with the May 2006 LINQ CTP. It contains additional things such as a Contacts table, as well as table-valued and scalar-valued functions to demonstrate additional LINQ to SQL functionality.
Юзаю SQL Server 2005 SP3, VS2008 SP1. DataContext создаю свежий.

Это сообщение отредактировал(а) Red Wind - 27.3.2009, 20:18
PM MAIL ICQ   Вверх
PashaPash
Дата 27.3.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Red Wind, хочешь покажу фокус? поменяй в "нерабочем" коде LAWN на LAWN1.


--------------------
PM MAIL WWW   Вверх
Red Wind
Дата 27.3.2009, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Походу пятисимвольные ID работают. Поле CustomerID типа nchar(5). Но какая разница?
PM MAIL ICQ   Вверх
Idsa
Дата 27.3.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Red Wind @  28.3.2009,  00:55 Найти цитируемый пост)
Но какая разница? 

"LAWN" при сохранении запишется как "LAWN ".


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Red Wind
Дата 27.3.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Блин, это же не nvarchar))) Даже стыдно smile 

Это сообщение отредактировал(а) Red Wind - 27.3.2009, 22:32
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




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


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

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