然而,我一直在尝试将SQL数据库加载到C ++中的数据表中;它似乎不想工作。但是,正如DataReader一样,连接正在运行。这是我的代码
void importDatabase() {
SqlConnection con;
SqlDataAdapter^ da;
SqlCommand cmd;
DataTable^ dt;
int count = 1;
try {
con.ConnectionString = "Data Source=MYNAME\\SQLEXPRESS;Initial Catalog=VinylRecords;Integrated Security=True";
cmd.CommandText = "SELECT * FROM Records";
cmd.Connection = %con;
con.Open();
da = gcnew SqlDataAdapter(%cmd);
dt = gcnew DataTable("Records");
Console::Write(da->ToString());
da->Fill(dt);
for (int i = 0; i < dt->Rows->Count - 1; i++) {
String^ value_string;
value_string = dt->Rows[i]->ToString();
Console::WriteLine(dt->Rows[i]->ToString());
count++;
}
cout << "There are " << count << " many records";
}
catch (Exception^ ex) {
Console::WriteLine(ex->ToString());
}
}
请注意,我稍微修改了源名称以在此处发布,但仅限于第一部分。 我的代码出了什么问题?
答案 0 :(得分:0)
所以,问题在于:
dt->Rows[i]->ToString()
Rows [i]是一个Row对象。 Row类的ToString()方法总是打印出完全限定的typename,这就是你所看到的。所以这在技术上工作得很好。要获得有用的东西,您需要做的是:您需要访问该行中的特定列并获取其值,然后输出该值。
有些事情:
foreach (DataRow dr in dt.Rows)
{
Console.Write(dr.Field<int>("ColumnOne"));
Console.Write(" | ");
Console.WriteLine(dr.Field<string>("ColumnTwo"));
}
在使用C ++ \ CLI时,我不完全确定访问DataTable中特定单元格的语法。所以我提供了C#等价物来解释为什么你得到托管类型名称的输出(例如&#34; System.Data.DataRow&#34;)而不是Row列内的信息。< / p>
此外,我注意到您使用&#34; mysql&#34;标记了此问题,但您使用的是ADO.NET System.Data.SqlClient命名空间。 SqlDataReader和SqlDataAdapter类仅适用于TSQL(Microsoft的SQL Server数据库)如果您实际连接到mysql数据库,则需要使用System.Data.OdbcDataAdapter类。您可以在此处阅读更多内容:https://msdn.microsoft.com/en-us/library/ms254931.aspx