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

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

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

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

Задача моя состоит узнать свободное место и общий объем дисков на удаленном сервере, для этого я использую Ole Automation Procedures в своем запросе.
Если можете предложить другие варианты буду только рад.
...
Рейтинг: 0 / 0
Загрузка данных из сложного запроса в DataTable
    #39186555
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
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
Загрузка данных из сложного запроса в DataTable
    #39186844
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

Спасибо, я попробую. Но сработает ли это если нет доступа к машине по сети, а есть только доступ к SQL Server?
...
Рейтинг: 0 / 0
Загрузка данных из сложного запроса в DataTable
    #39186850
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452Но сработает ли это если нет доступа к машине по сети, а есть только доступ к SQL Server?
нет, естественно
...
Рейтинг: 0 / 0
Загрузка данных из сложного запроса в DataTable
    #39186857
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Загрузка данных из сложного запроса в DataTable
    #39186905
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

а например эта не работает
Код: 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
Загрузка данных из сложного запроса в DataTable
    #39186922
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452,

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


PS сдаётся мне, что этот код бездумно скопирован невесть откуда
какая версия SQL сервера?
...
Рейтинг: 0 / 0
Загрузка данных из сложного запроса в DataTable
    #39186953
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
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
Загрузка данных из сложного запроса в DataTable
    #39186964
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Загрузка данных из сложного запроса в DataTable
    #39187000
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

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

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

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

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

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


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