На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела C/C++: Базы данных
Модераторы: B.V.
  
    > Помогите с написанием кода на VC++ для соединения с MS SQL и отправкой запроса
      Добрый день!
      Помогите пожалуйста с написанием кода для соединения и отправки запроса на удаленный 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 код выглядит так:

      ExpandedWrap disabled
        #!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++
      Заранее благодарен за любую помощь!
        Всем спасибо. Решил с помощью ADO. Всю информацию нашел на MSDN
          Цитата 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 код выглядит так:

          ExpandedWrap disabled
            #!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++
          Заранее благодарен за любую помощь!

          Какой код вы пишете? Промышленный, коммерческий? Это следует говорить в первую очередь :rulez::faq:
            Я работаю администратором баз данных, серверов. В работе в основном использую скриптовые языки такие как Perl или Lua. Но поставили задачу писать на C++. Вот изучаю язык. Тяжко, но увлекательно.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0363 ]   [ 16 queries used ]   [ Generated: 28.03.24, 15:06 GMT ]