错误:没有重载函数的实例
Posted
技术标签:
【中文标题】错误:没有重载函数的实例【英文标题】:Error : no instance of overloaded function 【发布时间】:2014-02-06 08:29:09 【问题描述】:我正在尝试使用以下代码在我的数据库 (SQL Server 2008) 中插入一些行:
CDB.cpp
#include "CDB.h"
void CDB::ajouterAlerte()
SqlConnection ^ mysqlConnection;
SqlDataAdapter ^ myDataAdapter;
DataSet ^ myDataSet;
DataRow ^ myRow;
SqlParameter ^ myParameter;
try
mySQLConnection = gcnew SqlConnection("Data Source=NECTARYS-PC;Initial Catalog=MonitoringN;Integrated Security=True;");
myDataAdapter = gcnew SqlDataAdapter();
myDataSet = gcnew DataSet();
// Open up the connection
mySQLConnection->Open();
myDataAdapter->SelectCommand = gcnew SqlCommand("select * from Alerte", mySQLConnection);
myDataAdapter->InsertCommand = gcnew SqlCommand("insert into Alerte (motif,dateAlerte," +
"fixee,nomPoste,nomApplication,nomFichier,FichierModel_id) values (@motif,@dateAlerte," +
"@fixee,@nomPoste,@nomApplication,@nomFichier,@FichierModel_id)", mySQLConnection);
myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@motif", SqlDbType::VarChar));
myParameter->SourceColumn = "motif";
myParameter->SourceVersion = DataRowVersion::Current;
myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@dateAlerte", SqlDbType::VarChar));
myParameter->SourceColumn = "dateAlerte";
myParameter->SourceVersion = DataRowVersion::Current;
myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@fixee", SqlDbType::Bit));
myParameter->SourceColumn = "fixee";
myParameter->SourceVersion = DataRowVersion::Current;
myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@nomPoste", SqlDbType::VarChar));
myParameter->SourceColumn = "nomPoste";
myParameter->SourceVersion = DataRowVersion::Current;
myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@nomApplication", SqlDbType::VarChar));
myParameter->SourceColumn = "nomApplication";
myParameter->SourceVersion = DataRowVersion::Current;
myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@nomFichier", SqlDbType::VarChar));
myParameter->SourceColumn = "nomFichier";
myParameter->SourceVersion = DataRowVersion::Current;
myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@FichierModel_id", SqlDbType::Int));
myParameter->SourceColumn = "FichierModel_id";
myParameter->SourceVersion = DataRowVersion::Current;
time_t now = time(0);
tm ltm;
localtime_s(<m, &now);
std::stringstream str;
str << ltm.tm_mday
<< "/"
<< 1 + ltm.tm_mon
<< "/"
<< 1900 + ltm.tm_year
<< " "
<< 1 + ltm.tm_hour
<< ":"
<< 1 + ltm.tm_min
<< ":"
<< 1 + ltm.tm_sec;
String^ dateAjoutSysteme = gcnew System::String(str.str().c_str());
Boolean fixee = true;
myDataAdapter->Fill(myDataSet, "Alerte");
myRow = myDataSet->Tables["Alerte"]->NewRow();
myRow->ItemArray[0] = "A";
myRow->ItemArray[1] = dateAjoutSysteme;
myRow->ItemArray[2] = fixee;
myRow->ItemArray[3] = "B";
myRow->ItemArray[4] = "C";
myRow->ItemArray[5] = "D";
myRow->ItemArray[6] = NULL;
myDataSet->Tables["Alerte"]->Rows->Add(myRow);
//we use insertcommand property for the update.
myDataAdapter->Update(myDataSet, "Alerte");
catch (Exception ^ e)
Console::Write(e->ToString());
__finally
mySQLConnection->Close();
system("PAUSE");
LISTSTR CDB::getListeAppsMetiers()
SqlConnection ^ mySQLConnection;
SqlCommand ^ mySQL;
SqlDataReader ^ myReader;
SqlDataAdapter ^ myDataAdapter;
DataSet ^ myDataSet;
DataRow ^ myRow;
SqlParameter ^ myParameter;
LISTSTR::iterator i;
LISTSTR listeAppsMetiers;
try
mySQLConnection = gcnew SqlConnection("Data Source=NECTARYS-PC;Initial Catalog=MonitoringN;Integrated Security=True;");
mySQL = gcnew SqlCommand("select * from AppMetier", mySQLConnection);
mySQLConnection->Open(); // Open up the connection
myReader = mySQL->ExecuteReader();
while (myReader->Read())
listeAppsMetiers.insert(listeAppsMetiers.end(), myReader["chemin"]->ToString()); // the error is marked at the point, just before insert(...
return listeAppsMetiers;
catch (Exception ^ e)
Console::Write(e->ToString());
__finally
myReader->Close();
mySQLConnection->Close();
CDB.h
#using <mscorlib.dll>
#using <System.dll>
#using <system.data.dll>
#using <System.Xml.dll>
#pragma warning (disable:4786)
#include <list>
#include <sstream>
#include <time.h>
#include <string>
#include <iostream>
#include <tchar.h>
using namespace System;
using namespace System::Data;
using namespace System::Xml;
using namespace System::Data::SqlClient;
typedef std::list<std::string> LISTSTR;
class CDB
CDB() //ctor
virtual ~CDB()
public:
void ajouterAlerte()
LISTSTR getListeAppsMetiers()
;
但是,我在标记的行上有错误,我还没有找到解决方法:
没有重载函数实例“std::list<_ty _alloc>::insert[with _Ty=std::string, _Alloc=std::allocator]" 匹配参数列表参数类型是: (std::_List_iterator>>, System::String ^) 对象类型为:LISTSTR
有什么绝妙的主意吗?
【问题讨论】:
您需要将String^
转换为std::string
。看这里:***.com/questions/946813/…
@AlexFarber,感谢您的回复,但我需要转换什么?
myReader["chemin"]->ToString()
是String^
,你需要std::string
是的,就是这样。非常感谢你。请回答以解决此主题。
【参考方案1】:
正如上面 cmets 中所解释的:您正在尝试将值 myReader["chemin"]->ToString()
(属于 Microsoft 发明的类型 String^
)添加到正常的 std::string
s 列表中。微软String
和std::string
之间没有隐式转换;您必须明确地进行转换。
幸运的是,有一个 CLR 库函数可以做到这一点:marshal_as
。
#include <msclr/marshal_cppstd.h>
...
while (myReader->Read())
listeAppsMetiers.insert(
listeAppsMetiers.end(),
msclr::interop::marshal_as<std::string>( myReader["chemin"]->ToString() ));
此答案中的代码复制自@sriwantha-attanayake 对类似问题的回答:https://***.com/a/8896629/1424877
【讨论】:
以上是关于错误:没有重载函数的实例的主要内容,如果未能解决你的问题,请参考以下文章
MFC:CSting IntelliSense:没有重载函数的实例