我有这个班级
#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,但为什么呢?
答案 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;
}