С++/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 С++ вы не должны использовать 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