C++/CLI SQL 使用带有参数的 ConnectionString 作为字符串

C++/CLI SQL use ConnectionString with parameters as string

正在尝试连接到 SQL 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";

我收到编译器错误:

Error (active) E1767 function "System::Data::SqlClient::SqlConnection::ConnectionString::set" cannot be called with the given argument list

当我尝试使用 SqlConnectionStringBuilder 时出现同样的错误:

SqlConnectionStringBuilder sqlBuilder;

sqlBuilder.DataSource = server;

那么如何在ConnectionString中使用字符串类型的参数呢?

在 CLR/CLI c++ 中你不应该使用有歧义的 string。它可能是 std::string,它与 .NET 的 string 不同。特别是很难判断何时使用:using namespace std;.

你应该做的是使用 String^ 这是对 .NET class.

的引用

所以你的代码应该是这样的:

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"));