Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Вызвать Stored Procedure. Как? / 12 сообщений из 12, страница 1 из 1
21.01.2011, 18:51
    #37072222
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
Взял примерчик на сайте МС.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
     [Function(Name = "dbo.Get_Dictionary")]
     [ResultType(typeof(Get_DictionaryResult1))] // ругается 1 - пишет что не может найти описание
     [ResultType(typeof(Get_DictionaryResult2))] // ругается 2 - пишет что не может найти описание
     public IMultipleResults Get_Dictionary()
     {
         IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
         return ((IMultipleResults)(result.ReturnValue));
     }

Ситуация такая: у меня есть SP ("dbo.Get_Dictionary") на SQL Server 2008.
Эта SP возвращает 2 набора данных
Ну допустим есть такая SP:
Код: plaintext
1.
2.
3.
4.
CREATE PROCEDURE dbo.Get_Dictionary
AS
select * from products
select * from customers

Задача такова:
1. получить оба набора данных
2. разнести наборы данных на два DataGrid
...
Рейтинг: 0 / 0
21.01.2011, 19:05
    #37072234
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
RegisteredUser,

Во первых - не тот форум. Во вторых - никак, по крайней мере с помощью LINQ.
...
Рейтинг: 0 / 0
21.01.2011, 19:08
    #37072238
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
Сам маюсь с этой бедой. Но думаю что никак нельзя.
...
Рейтинг: 0 / 0
21.01.2011, 19:11
    #37072247
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
Не понял?
WPF не работает с SP?
Не верю! Неужели нет никакого решения?
...
Рейтинг: 0 / 0
21.01.2011, 19:18
    #37072258
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
RegisteredUser,

Работает, но два разных набора строк возвращать не умеет. По крайней мере я не находил этого. И вы говорите не про WPF, а про LINQ. Это как балерина и утюг - ничего общего.
...
Рейтинг: 0 / 0
21.01.2011, 19:32
    #37072295
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
Руки-крюкиRegisteredUser,

Работает, но два разных набора строк возвращать не умеет. По крайней мере я не находил этого. И вы говорите не про WPF, а про LINQ. Это как балерина и утюг - ничего общего.

В общем забудем про LINQ пока.
Как в WPF приложениии вызвать мою SP и потом раскидать по двум DataGrid?
Любой способ покатит!
...
Рейтинг: 0 / 0
21.01.2011, 19:42
    #37072314
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
RegisteredUser,

Если через LINQ, то:
1. Add new item - > LINQ to SQL Calsses.
2. Двойной клик на добавленом item e.
3. Открываем server explorer и там соединяемся с SQL сервером.
4. Находим в дереве процедуру и перетаскиваем ее на форму дизайнера.
5. Так же перетаскиваем таблицу, которую возвращает ХП.
6. Заходим в проперти процедуры и выставляем в тип возвращаемого значения созданый класс для таблицы.
Все, у вас готовы все классы для работы с БД.
Дальше создаем экземпляр созданного вами DataContex'а БД, конектимся к серверу, делаем вызов прцоедуры и результат пихаем в ItemSource дата грида. Если нужно изменение строк то ответ после вызова прцоедуры надо преобразовать в список (там есть функция ToList). Это так, в кратце. Думаю разберетесь.
...
Рейтинг: 0 / 0
21.01.2011, 19:43
    #37072317
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
Но опять таки, процедура хоть и вернет два набора строк, но LINQ вам вернет только первый попавшийся набор.
...
Рейтинг: 0 / 0
21.01.2011, 21:38
    #37072503
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
а как жк быть с этим?
http://msdn.microsoft.com/ru-ru/library/bb399344(v=VS.90).aspx
микрософт божится что работает
...
Рейтинг: 0 / 0
22.01.2011, 00:52
    #37072694
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
Руки-крюкиНо опять таки, процедура хоть и вернет два набора строк, но LINQ вам вернет только первый попавшийся набор.

Значит так: метод научного тыка еще никем не отменен, поэтому рассказываю как делать.

Вот тут все правильно

1. Add new item - > LINQ to SQL Calsses.
2. Двойной клик на добавленом item e.
3. Открываем server explorer и там соединяемся с SQL сервером.
4. Находим в дереве процедуру и перетаскиваем ее на форму дизайнера.

теперь делаем так
5. жмем F6 (Build Solution)
6. открываем linq_Collector2011. dbml и ищем такое
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  <Function Name="dbo.Get_Dictionary" Method="Get_Dictionary">
    <Parameter Name="dicNameID" Type="System.Int64" DbType="BigInt" />
    <ElementType Name="Get_DictionaryResult">
      <Column Name="dicItem" Type="System.String" DbType="VarChar(200)" CanBeNull="true" />
      <Column Name="dicItemValue" Type="System.String" DbType="VarChar(500)" CanBeNull="true" />
      <Column Name="dicItemID" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
    </ElementType>
  </Function>

и ручками добавляем

Код: plaintext
1.
2.
3.
    <ElementType Name="Get_DictionaryResultInfo">
      <Column Name="dicName" Type="System.String" DbType="VarChar(200)" CanBeNull="true" />
      <Column Name="dicItemsCount" Type="System.Int64" DbType="BigInt" CanBeNull="true" />
    </ElementType>

получаем

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
  <Function Name="dbo.Get_Dictionary" Method="Get_Dictionary">
    <Parameter Name="dicNameID" Type="System.Int64" DbType="BigInt" />
    <ElementType Name="Get_DictionaryResult">
      <Column Name="dicItem" Type="System.String" DbType="VarChar(200)" CanBeNull="true" />
      <Column Name="dicItemValue" Type="System.String" DbType="VarChar(500)" CanBeNull="true" />
      <Column Name="dicItemID" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
    </ElementType>
    <ElementType Name="Get_DictionaryResultInfo">
      <Column Name="dicName" Type="System.String" DbType="VarChar(200)" CanBeNull="true" />
      <Column Name="dicItemsCount" Type="System.Int64" DbType="BigInt" CanBeNull="true" />
    </ElementType>
  </Function> 
...

7. жмем F6 (Build Solution)
8. смотрим в linq_Collector2011.designer.cs и видим чудо типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
		[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.Get_Dictionary")]
		[global::System.Data.Linq.Mapping.ResultTypeAttribute(typeof(Get_DictionaryResult))]
		[global::System.Data.Linq.Mapping.ResultTypeAttribute(typeof(Get_DictionaryResultInfo))]
		public IMultipleResults Get_Dictionary([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="BigInt")] System.Nullable<long> dicNameID)
		{
			IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), dicNameID);
			return ((IMultipleResults)(result.ReturnValue));
		}
9. Теперь идем на форму MainWindow.xaml.cs
10. Кидаем на форму кнопку и два датагрида
11. Теперь в коде формы пишем что-то типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        public SqlConnection cnnsql_Collector = new SqlConnection(global::Linq2SQL_00.Properties.Settings.Default.Collector2011ConnectionString);


        private void bt_FillGrid2_Click(object sender, RoutedEventArgs e)
        {
            using (linq_Collector2011DataContext ctx = new linq_Collector2011DataContext(cnnsql_Collector))
            {
                IMultipleResults sprocResults = ctx.Get_Dictionary(-50);
                var Res1 = sprocResults.GetResult<Get_DictionaryResult>();
                var Res2 = sprocResults.GetResult<Get_DictionaryResultInfo>();

                dtg_Show1.ItemsSource = Res1.ToArray();
                dtg_Show2.ItemsSource = Res2.ToArray();

            }
        }// ------ bt_FillGrid2_Click
12. Запускаем приложение жмем на кнопку и тихо фигеем
...
Рейтинг: 0 / 0
24.01.2011, 16:34
    #37075814
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
RegisteredUser,

И все работает? Тогда круто, буду знать.
...
Рейтинг: 0 / 0
24.01.2011, 17:28
    #37076000
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызвать Stored Procedure. Как?
Руки-крюкиRegisteredUser,

И все работает? Тогда круто, буду знать.

Работает! сам проверял!
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Вызвать Stored Procedure. Как? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]