Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.12.222] |
|
Сообщ.
#1
,
|
|
|
Добрый день!
Помогите пожалуйста с написанием кода для соединения и отправки запроса на удаленный MS SQL SERVER 2012 на VC++.. Используется Visual Studio 2013 Pro. Прочитал кучу форумов, но собрать в единое целое никак не могу ( Скрипт вытаскивает из двух логов на двух удаленных машинах строку вида 1234,1235,1236,3456/3456, преобразует ее к виду '1234','1235','1236','3456' соединяется с Ms Sql Server находящимся по адресу ip 10.22.31.108 и посылает запрос: Select * From exec_history AS h (NOLOCK) Where account in ('1234','1235','1236','3456') And account Not In (Select account From exec_history AS h (NOLOCK) Where [status] = 1) далее результат запроса выводится в файл. На Perl код выглядит так: #!perl -w use strict; use Win32::SqlServer; use Time::localtime; use feature ":5.10"; my $tm = localtime; my ($day, $month, $year) = ($tm->mday, $tm->mon + 1, $tm->year + 1900); my $end_date = $year.'-'.sprintf("%.2ld", $month).'-'.sprintf("%.2ld", $day); open INFILE, '\\\\10.11.12.136\\exec1\\'.$end_date.'.log' || die('Unable to open input file.'); my $res = ""; while (<INFILE>) { chomp; if (m/Accounts:/) { $res = "\'".$'; $res =~ s/,/\', \'/g; $res =~ s/;/\'/g; $res =~ s/\/[^']*'/'/g; } } close INFILE; open INFILE, '\\\\10.11.12.137\\exec2\\'.$end_date.'.log' || die('Unable to open input file.'); my $res1 = ""; while (<INFILE>) { chomp; if (m/Accounts:/) { $res1 = "\'".$'; $res1 =~ s/,/\', \'/g; $res1 =~ s/;/\'/g; $res1 =~ s/\/[^']*'/'/g; } } close INFILE; my $sqlsrv = sql_init('10.22.31.108', 'Alex', 'Alex19987', 'bd_test'); my $st = <<SQLEND; select account, date_end from exec_history AS h (NOLOCK) Where account in ( SQLEND $st .= $res.' , '.$res1; $st .= <<SQLEND; ) And account Not In (Select account From exec_history AS h (NOLOCK) Where [status] = 1) SQLEND my @result = $sqlsrv->sql($st, Win32::SqlServer::LIST, Win32::SqlServer::COLINFO_NAMES); #$mess .= join ("</b></td><td align=center bgcolor=#dfdfdf><b>", @{$result[0]}); open OUTFILE, '>result.txt' || die('Unable to open input file.'); foreach my $row (@result[1..$#result]) { print OUTFILE join("\t", @$row), "\n"; } close OUTFILE; Проблема заключается в том, что я никак не могу понять как установить соединение с Ms Sql и отправить запрос в C++ Заранее благодарен за любую помощь! |
Сообщ.
#2
,
|
|
|
Всем спасибо. Решил с помощью ADO. Всю информацию нашел на MSDN
|
Сообщ.
#3
,
|
|
|
Цитата Lichius @ Добрый день! Помогите пожалуйста с написанием кода для соединения и отправки запроса на удаленный MS SQL SERVER 2012 на VC++.. Используется Visual Studio 2013 Pro. Прочитал кучу форумов, но собрать в единое целое никак не могу ( Скрипт вытаскивает из двух логов на двух удаленных машинах строку вида 1234,1235,1236,3456/3456, преобразует ее к виду '1234','1235','1236','3456' соединяется с Ms Sql Server находящимся по адресу ip 10.22.31.108 и посылает запрос: Select * From exec_history AS h (NOLOCK) Where account in ('1234','1235','1236','3456') And account Not In (Select account From exec_history AS h (NOLOCK) Where [status] = 1) далее результат запроса выводится в файл. На Perl код выглядит так: #!perl -w use strict; use Win32::SqlServer; use Time::localtime; use feature ":5.10"; my $tm = localtime; my ($day, $month, $year) = ($tm->mday, $tm->mon + 1, $tm->year + 1900); my $end_date = $year.'-'.sprintf("%.2ld", $month).'-'.sprintf("%.2ld", $day); open INFILE, '\\\\10.11.12.136\\exec1\\'.$end_date.'.log' || die('Unable to open input file.'); my $res = ""; while (<INFILE>) { chomp; if (m/Accounts:/) { $res = "\'".$'; $res =~ s/,/\', \'/g; $res =~ s/;/\'/g; $res =~ s/\/[^']*'/'/g; } } close INFILE; open INFILE, '\\\\10.11.12.137\\exec2\\'.$end_date.'.log' || die('Unable to open input file.'); my $res1 = ""; while (<INFILE>) { chomp; if (m/Accounts:/) { $res1 = "\'".$'; $res1 =~ s/,/\', \'/g; $res1 =~ s/;/\'/g; $res1 =~ s/\/[^']*'/'/g; } } close INFILE; my $sqlsrv = sql_init('10.22.31.108', 'Alex', 'Alex19987', 'bd_test'); my $st = <<SQLEND; select account, date_end from exec_history AS h (NOLOCK) Where account in ( SQLEND $st .= $res.' , '.$res1; $st .= <<SQLEND; ) And account Not In (Select account From exec_history AS h (NOLOCK) Where [status] = 1) SQLEND my @result = $sqlsrv->sql($st, Win32::SqlServer::LIST, Win32::SqlServer::COLINFO_NAMES); #$mess .= join ("</b></td><td align=center bgcolor=#dfdfdf><b>", @{$result[0]}); open OUTFILE, '>result.txt' || die('Unable to open input file.'); foreach my $row (@result[1..$#result]) { print OUTFILE join("\t", @$row), "\n"; } close OUTFILE; Проблема заключается в том, что я никак не могу понять как установить соединение с Ms Sql и отправить запрос в C++ Заранее благодарен за любую помощь! Какой код вы пишете? Промышленный, коммерческий? Это следует говорить в первую очередь |
Сообщ.
#4
,
|
|
|
Я работаю администратором баз данных, серверов. В работе в основном использую скриптовые языки такие как Perl или Lua. Но поставили задачу писать на C++. Вот изучаю язык. Тяжко, но увлекательно.
|