无法访问公共静态方法

时间:2013-08-16 02:34:37

标签: c++ visual-c++

我有这个班级

#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,但为什么呢?

1 个答案:

答案 0 :(得分: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是有益的,但如果您不尝试与本机代码互操作,它也可能会不必要地复杂化。只是一个想法。

完整代码:

db.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;
    }

};

}

Main.cpp的

// 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;
}