gpt4 book ai didi

c++ - SqlDataAdapter 未加载数据表 - C++

转载 作者:行者123 更新时间:2023-11-29 19:00:30 27 4
gpt4 key购买 nike

然而,我一直在尝试将 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());
}
}

请注意,我稍微更改了发布在这里的源名称,但只是第一部分。我的代码有什么问题吗?

最佳答案

所以,问题就在这里:

dt->Rows[i]->ToString()

Rows[i] 是一个 Row 对象。 Row 类的 ToString() 方法总是打印出完全限定的类型名,这就是您所看到的。所以这在技术上工作得很好。要获得有用的内容,您需要做的是:您需要访问该行中的特定列并获取其值,然后输出该值。

大致如下:

foreach (DataRow dr in dt.Rows)
{
Console.Write(dr.Field<int>("ColumnOne"));
Console.Write(" | ");
Console.WriteLine(dr.Field<string>("ColumnTwo"));
}

我不完全确定使用 C++\CLI 时访问 DataTable 内特定单元格的语法。因此,我提供了 C# 等效项来解释为什么您获得的是托管类型名称(例如“System.Data.DataRow”)的输出,而不是 Row 列内的信息。

此外,我注意到您用“mysql”标记了这个问题,但您使用的是 ADO.NET System.Data.SqlClient 命名空间。 SqlDataReader 和SqlDataAdapter 类仅适用于TSQL(Microsoft 的SQL Server 数据库)。如果您实际上连接到mysql 数据库,您将需要使用System.Data.OdbcDataAdapter 类。您可以在这里阅读更多内容:https://msdn.microsoft.com/en-us/library/ms254931.aspx

关于c++ - SqlDataAdapter 未加载数据表 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43924203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com