Как установить соединение между моим проектом 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" в свой проект. После этой копии/вставки я не установил ни одного провайдера.
Ошибка связана с тем, что в вашем проекте не установлен флаг 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++.
gcnew
который операторinsert
, пожалуйста?gcnew
в CLI / C ++ такой же, какnew
в управляемом C ++. Там нет никакой разницы в использовании. Вы можете использовать учебник и заменитьnew
наgcnew
и он будет работать.