C++/CLI SQL използва ConnectionString с параметри като низ

Опит за свързване към SQL Server в приложението VS2019 C++/CLI. Този код работи за мен:

#include "pch.h"
#include <iostream>

#using < System.dll>
#using < System.Data.dll>

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

bool ConnectToSQLServer(string server)
{
    SqlConnection cnn;
    cnn.ConnectionString = "Server=.\\SQLExpress;Integrated Security=SSPI;database=master";
    try
    {
        cnn.Open();
        cnn.Close();
        return true;
    }
    catch (SqlException ^ex)
    {
        return false;
    }

}

int main()
{
    if (ConnectToSQLServer(".\\SQLExpress"))
        printf("Connected!");
    else
        printf("Can not connect to SQL server!");

    return 0;
}

но когато променя ConnectionString на това:

cnn.ConnectionString = "Server="+ server +";Integrated Security=SSPI;database=master";

Получавам грешка на компилатора:

Грешка (активна) E1767 функция System::Data::SqlClient::SqlConnection::ConnectionString::set не може да бъде извикана с дадения списък с аргументи

Същата грешка, когато се опитвам да използвам SqlConnectionStringBuilder:

SqlConnectionStringBuilder sqlBuilder;

sqlBuilder.DataSource = server;

И така, как да използвам параметри от тип низ в ConnectionString?


person Kirill Mityugin    schedule 15.11.2020    source източник


Отговори (1)


В CLR/CLI c++ не трябва да използвате string, което е двусмислено. може да е std::string, което е различен тип от string на .NET. особено трудно е да се каже кога използвате: using namespace std;.

Това, което трябва да направите, е да използвате String^, което е препратка към .NET клас.

така че вашият код трябва да бъде нещо като:

bool ConnectToSQLServer(String^ server)
{
    SqlConnection cnn;
    cnn.ConnectionString =  String::Format("Server={0};Integrated Security=SSPI;database=master", server);
    try
    {
        cnn.Open();
        cnn.Close();
        return true;
    }
    catch (SqlException ^ex)
    {
        return false;
    }
}

И можете да го наречете така:

ConnectToSQLServer(gcnew String(".\\SQLExpress"));
person SHR    schedule 15.11.2020
comment
Благодаря! Използва се много лесно - person Kirill Mityugin; 15.11.2020