Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Загрузка данных из сложного запроса в DataTable / 19 сообщений из 19, страница 1 из 1
05.03.2016, 15:00
    #39186429
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Есть сложный запрос с использованием курсоров, объявление переменных и использованием сторонних хранимок, но возвращающий в результате данные в виде таблицы. Как результаты подобного запроса занести в DataTable. Создать из этого запроса хранимку возможности нет. Обычные средства типа SQLCommand или SQLDataadapter.Fill не работают, так как ругаются на синтаксис (с ним все в порядке).
...
Рейтинг: 0 / 0
05.03.2016, 19:16
    #39186516
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
lex452так как ругаются на синтаксис (с ним все в порядке).
Значит не все в прядке.
...
Рейтинг: 0 / 0
05.03.2016, 19:16
    #39186517
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
lex452Создать из этого запроса хранимку возможности нет.
Не верю
...
Рейтинг: 0 / 0
05.03.2016, 19:49
    #39186534
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Cat2,

Возможности нет у меня.
...
Рейтинг: 0 / 0
05.03.2016, 19:49
    #39186535
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Cat2Не верюдумаю, что не технически не может, а организационно
...
Рейтинг: 0 / 0
05.03.2016, 19:52
    #39186537
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Shocker.Pro,

Именно
...
Рейтинг: 0 / 0
05.03.2016, 19:58
    #39186540
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Например, первая строка моего запроса, declare @ID int

А при попытке его выполнить через sqlcommand выдает ошибку Не найдена переменная @ID, объявите ее. Хотя я ее как раз и объявляю. Как я понимаю подобные запросы не поддерживаются.

Задача моя состоит узнать свободное место и общий объем дисков на удаленном сервере, для этого я использую Ole Automation Procedures в своем запросе.
Если можете предложить другие варианты буду только рад.
...
Рейтинг: 0 / 0
05.03.2016, 20:28
    #39186555
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
lex452Cat2,

Возможности нет у меня.
У Вас всегда есть возможность объявить временную хранимую процедуру
lex452Если можете предложить другие варианты буду только рад.
Примерно так, через WMI

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
 try
            {
                ConnectionOptions connection = new ConnectionOptions();
                connection.Username = userNameBox.Text;
                connection.Password = passwordBox.Text;
                connection.Authority = "ntlmdomain:DOMAIN";

                ManagementScope scope = new ManagementScope(
                    "\\\\FullComputerName\\root\\CIMV2", connection);
                scope.Connect();

                ObjectQuery query= new ObjectQuery(
                    "SELECT * FROM Win32_LogicalDisk"); 

                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher(scope, query);

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_LogicalDisk instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("FreeSpace: {0}", queryObj["FreeSpace"]);
                    Console.WriteLine("Size: {0}", queryObj["Size"]);
                }
              
            }
            catch(ManagementException err)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + err.Message);
            }
            catch(System.UnauthorizedAccessException unauthorizedErr)
            {
                MessageBox.Show("Connection error (user name or password might be incorrect): " + unauthorizedErr.Message);
            }
...
Рейтинг: 0 / 0
06.03.2016, 13:06
    #39186844
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Cat2,

Спасибо, я попробую. Но сработает ли это если нет доступа к машине по сети, а есть только доступ к SQL Server?
...
Рейтинг: 0 / 0
06.03.2016, 13:22
    #39186850
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
lex452Но сработает ли это если нет доступа к машине по сети, а есть только доступ к SQL Server?
нет, естественно
...
Рейтинг: 0 / 0
06.03.2016, 13:37
    #39186857
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
lex452Как я понимаю подобные запросы не поддерживаются.
неправда.
Код: c#
1.
2.
3.
4.
5.
DataTable t = new DataTable();
using (SqlDataAdapter a = new SqlDataAdapter("declare @id int set @id=100 select @id as id", "server=(local);database=master;integrated security=SSPI;") 
{
      a.Fill(t);
}
...
Рейтинг: 0 / 0
06.03.2016, 15:54
    #39186905
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Изопропил,

а например эта не работает
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
DECLARE @hr int
DECLARE @fso int
DECLARE @drive char(1)
DECLARE @odrive int
DECLARE @TotalSize varchar(20) DECLARE @MB Numeric ; SET @MB = 1048576
CREATE TABLE #drives (drive char(1) PRIMARY KEY, FreeSpace int NULL,
TotalSize int NULL) INSERT #drives(drive,FreeSpace) EXEC
master.dbo.xp_fixeddrives EXEC @hr=sp_OACreate
'Scripting.FileSystemObject',@fso OUT IF @hr <> 0 EXEC sp_OAGetErrorInfo
@fso
DECLARE dcur CURSOR LOCAL FAST_FORWARD
FOR SELECT drive from #drives ORDER by drive
OPEN dcur FETCH NEXT FROM dcur INTO @drive
WHILE @@FETCH_STATUS=0
BEGIN
EXEC @hr = sp_OAMethod @fso,'GetDrive', @odrive OUT, @drive
IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso EXEC @hr =
sp_OAGetProperty
@odrive,'TotalSize', @TotalSize OUT IF @hr <> 0 EXEC sp_OAGetErrorInfo
@odrive UPDATE #drives SET TotalSize=@TotalSize/@MB WHERE
drive=@drive FETCH NEXT FROM dcur INTO @drive
End
Close dcur
DEALLOCATE dcur
EXEC @hr=sp_OADestroy @fso IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso
SELECT @@Servername
SELECT
drive, TotalSize as 'Total(MB)', FreeSpace as 'Free(MB)' FROM #drives
ORDER BY drive 


и выдает ошибку что я писал выше
...
Рейтинг: 0 / 0
06.03.2016, 16:36
    #39186922
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
lex452,

1)ошибку не выдаёт.
2)данный запрос выдаёт не одну таблицу, а две. DataSet заполняйте.
Или уберите SELECT @@Servername
3) на сервере должно быть разрешено выполнение 'Ole Automation Procedures',
я б на месте админа не разрешил
4) drop table #drives добавить полезно в конце


PS сдаётся мне, что этот код бездумно скопирован невесть откуда
какая версия SQL сервера?
...
Рейтинг: 0 / 0
06.03.2016, 19:23
    #39186953
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Изопропил,
1)ошибку не выдаёт.
2)данный запрос выдаёт не одну таблицу, а две. DataSet заполняйте.
Или уберите SELECT @@Servername
3) на сервере должно быть разрешено выполнение 'Ole Automation Procedures',
я б на месте админа не разрешил
4) drop table #drives добавить полезно в конце


1) Ошибку у меня выдает. Наверное где-то делаю что то не так
2)Каюсь использовал запрос не именно этот, таблицу создавал без #, @@ServerName не использовал, то есть возвращает мой запрос 1 таблицу
3) Разрешение есть. Почему вы бы не разрешили?
4) DROP не нужен (см. пункт 2)

Как я понимаю если работает Adapter.Fill, то должно работать и sqlCommand.ExecuteReader?


SQL Server 2014 enterprise
...
Рейтинг: 0 / 0
06.03.2016, 20:12
    #39186964
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
lex452,
1) естественно
2) смысл постить сюда не то что не работает, а то что подвернулось?
3) опасная затея в рамках процесса SQL сервера левые COM объекты создавать(а как администратор может гарантировать что они не левые).
если до разрушения данных не дойдёт, то утечки памяти заработать очень легко
4)-
5) ExecureReader собственно внутри ададаптера и используется

может такой код устроит ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT DISTINCT
    SUBSTRING(volume_mount_point, 1, 1) AS volume_mount_point
    ,total_bytes/1024/1024 AS total_MB
    ,available_bytes/1024/1024 AS available_MB
FROM
    sys.master_files AS f
CROSS APPLY
    sys.dm_os_volume_stats(f.database_id, f.file_id);
...
Рейтинг: 0 / 0
06.03.2016, 22:09
    #39187000
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Изопропил,

Я примерно такое и использую. Но мне нужно знать сколько всего размер диска, ведь на одном и том же может быть несколько баз и других файлов.
А код я этот выложим, потому что к оригиналу доступа нет, он на работе. А OLE я планирую включать перед выполнением запроса и выключать после.
...
Рейтинг: 0 / 0
06.03.2016, 22:54
    #39187009
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
lex452Но мне нужно знать сколько всего размер диска, ведь на одном и том же может быть несколько баз и других файлов.

а что по твоему этот код возвращает?

посмотри что можно полезного получить из sys.master_files
да и база может быть на нескольких дисках
...
Рейтинг: 0 / 0
07.03.2016, 12:06
    #39187111
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Изопропил,

Спасибо, посмотрю.
...
Рейтинг: 0 / 0
09.03.2016, 12:33
    #39187993
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из сложного запроса в DataTable
Изопропил,

То что нужно, спасибо огромное
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Загрузка данных из сложного запроса в DataTable / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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