SqlDataAdapter没有加载datatable - C ++

时间:2017-05-11 19:38:59

标签: c++ mysql sql

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

请注意,我稍微修改了源名称以在此处发布,但仅限于第一部分。 我的代码出了什么问题?

1 个答案:

答案 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