1

我有这门课

#pragma once
namespace CMT{
namespace sql=System::Data::SqlClient;
public ref class db
{
public:db(void){}
public: static sql::SqlConnection SC(){
            System::String cstring="data source=192.168.0.139\\cedfit; "+
                "initial catalog=cedfitdb; user id=client; password=cedfit";
            sql::SqlConnection sc=new sql::SqlConnection(cstring);
            return sc;
        }

};
}

现在,当我进入表单 1 加载事件时,我无法访问我的 db 的 SC() 方法,为什么?

我还尝试在 form1 加载事件中制作此代码:

System::Data::SqlConnection mycon=db::SC();
mycon.Open();//I also tried mycon->Open() and mycon::Open()

为什么它不起作用?为什么程序不能识别“Open()”?此外,当我穿上#include "db.h"CMT.cpp 时,它说cannot covert from System::Data::Sqlclient::SqlConnection to int 我确定我正在返回一个 SqlConnection,但为什么呢?

4

1 回答 1

3

尝试通过 C++/CLI 在 .NET 框架中使用引用类型时,您会遇到很多错误。

-- 在 C++/CLI 中引用 .NET 引用类型时需要使用 ^。此外,在为引用类型分配内存时,您需要使用gcnew而不是new. 请参阅以下更改:

static sql::SqlConnection^ SC()
{
    System::String^ cstring = "data source=" + "asdfasdf";
    sql::SqlConnection^ sc = gcnew sql::SqlConnection(cstring);

    return sc;
}

-- 在您的代码中尝试使用该方法时,这又是一个问题。此外,您没有SqlConnection为 和指定正确的命名空间CMT::db::SC

int main(array<System::String ^> ^args)
{
    System::Data::SqlClient::SqlConnection^ mycon = CMT::db::SC();
    mycon->Open();

    return 0;
}

附带说明一下,您需要 C++/CLI 而不是 C# 是否有特殊原因?在某些情况下 C++/CLI 是有益的,但如果您不尝试与本机代码进行互操作,它也可能会变得不必要地复杂。只是一个想法。

完整代码:

数据库.h

#pragma once

namespace CMT {
namespace sql = System::Data::SqlClient;

ref class db
{
public:

    db(void)
    {
    }

    static sql::SqlConnection^ SC()
    {
        System::String^ cstring = "whatever";
        sql::SqlConnection^ sc = gcnew sql::SqlConnection(cstring);

        return sc;
    }

};

}

主文件

// ConsoleApplication1.cpp : main project file.

#include "stdafx.h"
#include "db.h"

using namespace System;

int main(array<System::String ^> ^args)
{
    System::Data::SqlClient::SqlConnection^ mycon = CMT::db::SC();
    mycon->Open();

    return 0;
}
于 2013-08-16T02:53:25.063 回答