Как установить стабильное соединение с SQL Server 2008 и кодировать мои первые операции CRUD на C ++

0

Как установить соединение между моим проектом C++ и SQL Server 2008? Ссылаясь на некоторые статьи в Интернете, лучший способ - использовать ADO.NET API. Я искал несколько примеров кода, делающих операции crud, и показываю, как сделать соединение с БД, и вот лучший учебник, который я нашел.

Проблема здесь, после создания нового проекта New> Visual C++> Empty Project (.NET Framework 4.5), возникли некоторые ошибки при копировании/вставке первого фрагмента, который:

// This is the main project file for VC++ application project
// generated using an Application Wizard.

#include "stdafx.h"
// Standard
#using <mscorlib.dll>
#using <System.dll>
#using <system.data.dll> // This is required for the ADO.NET Provider
#include <tchar.h>

using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;

// This is the entry point for this application
int _tmain(void)
{
    SqlConnection      * mySQLConnection;
    SqlCommand         * mySQL;
    SqlDataReader      * myReader;

    try
    {
        mySQLConnection = new SqlConnection(
            S"server=local;Trusted_Connection=yes;database=pubs;");
        mySQL = new SqlCommand (S"select * from authors",
            mySQLConnection);

        mySQLConnection->Open (); // Open up the connection
        myReader = mySQL->ExecuteReader ();

        while(myReader->Read ())
            Console::WriteLine(myReader->get_Item("au_lname")->ToString ()); 
    }
    catch(Exception * e)
    {
        Console::Write(e->ToString () );
    }
    __finally
    {
        myReader->Close ();
        mySQLConnection->Close();
    }
    return 0;
}

вот первая ошибка 22:

2 IntelliSense: "#using" требует C++/режим CLI c:\Users\Nectarys\Documents\Visual Studio 2013\Projects\Project2\Project2\Source.cpp

Как мне исправить это, пожалуйста? (Если проблема связана с поставщиком, как я могу проверить, установлен ли я, и что у меня есть правильная версия?)

Примечание. Я включил "stdafx.h" в свой проект. После этой копии/вставки я не установил ни одного провайдера.

Теги:
ado.net
sql-server-2008
visual-studio-2013

1 ответ

1
Лучший ответ

Ошибка связана с тем, что в вашем проекте не установлен флаг Common Language Runtime, поэтому он пытается скомпилировать как собственный код вместо управляемого. Чтобы установить флаг, щелкните правой кнопкой мыши проект и выберите "Свойства", в общем разделе приведена опция "Common Language Runtime Support".

Учебное пособие, которое вы связываете, относится к 2002 году и использует manged C++, который был введен до CLI/C++. Для компиляции управляемого C++ флаг должен быть установлен в /clr: oldsyntax. Visual Studio intellisense даст вам ошибки, потому что не поддерживает управляемый C++, только CLI/C++. Руководство по миграции находится здесь: http://msdn.microsoft.com/en-us/library/ms235289.aspx, но по существу вам нужно заменить звездочки в объявлениях переменных с помощью шляп ("^"), используйте gcnew вместо new, не помещайте "S" перед строками (они автоматически управляются строками в управляемом коде) и изменяют, как вы обращаетесь к элементу читателя, чтобы использовать доступ к массиву. Новый код будет таким (скомпилируйте с /clr):

#using <mscorlib.dll>
#using <System.dll>
#using <system.data.dll> // This is required for the ADO.NET Provider
#include <tchar.h>

using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;

// This is the entry point for this application
int _tmain(void)
{
    SqlConnection      ^ mySQLConnection;
    SqlCommand         ^ mySQL;
    SqlDataReader      ^ myReader;

    try
    {
        mySQLConnection = gcnew SqlConnection(
            "server=local;Trusted_Connection=yes;database=pubs;");
        mySQL = gcnew SqlCommand ("select * from authors",
            mySQLConnection);

        mySQLConnection->Open (); // Open up the connection
        myReader = mySQL->ExecuteReader ();

        while(myReader->Read ())
            Console::WriteLine(myReader["au_lname"]->ToString ()); 
    }
    catch(Exception ^ e)
    {
        Console::Write(e->ToString () );
    }
    __finally
    {
        myReader->Close ();
        mySQLConnection->Close();
    }
    return 0;
}

К сожалению, я не знаю, как использовать SqlClient, написанный в CLI/C++.

  • 0
    Спасибо за ответ, не могли бы вы написать полный запрос на основе gcnew который оператор insert , пожалуйста?
  • 0
    gcnew в CLI / C ++ такой же, как new в управляемом C ++. Там нет никакой разницы в использовании. Вы можете использовать учебник и заменить new на gcnew и он будет работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню