我正在尝试将在线MySql数据库保存到本地Sqlite数据库。我要做的是,尝试将整个数据从MySql获取到数据表中,然后从数据表中保存到Sqlite中。因此,我尝试确保首先通过“ Console.printLine”对数据表进行计数,然后从MySql中获取所有数据。

问题是,当我使用SELECT COUNT(REFENCE)对MySql的PhpMyAdmin中的数据进行计数时,我得到了83,335行的计数,但是在Console.WriteLine中,使用了+1增量,我最多只能得到3,857行,这使我相信我得到的是不完整的。你能告诉我我哪里错了。如果您有更好的复制方法,则可以将Online MySql“表”数据复制到Sqlite表中。谢谢。

private void buttonX1_Click(object sender, EventArgs e)
{
    const string sql1 =
          @"SELECT reference, DATE(trx_date) as 'date', chassis_nmbr, status, remarks,
            approved_by, DATE(date_approved), branch_code FROM jobcomp_hdr;";
    var table = new DataTable("onlineData");
    using (var conn = new DwoAccess().ConnectToMySql())
    {
        using (var cmd = new MySqlCommand(sql1, conn))
        {
            try
            {
                 cmd.CommandTimeout = 60;
                 var adapt = new MySqlDataAdapter(cmd);
                 conn.Open();
                 adapt.Fill(table);
             }
             catch (Exception ex)
             {
                 //ignore
             }
         }
     }
     var x=0;
     foreach (DataRow row in table.Rows)
     {
          Console.WriteLine(row["reference"].ToString());
          x += 1;
     }
     Console.WriteLine(x.ToString());
}

最佳答案

我认为问题出在执行查询和超时的时间上,所有行的数量都很大,而执行的时间却很长。因此,可以使用LIMIT在其中设置要跳过的数字行和要获取的数字行。使用for循环和表中所有行的数量,在这种情况下,您可以将表分为几部分,共1,000个项目。

在这里,您可以找到有关mysql中LIMIT的更多信息,samples

for (int i = 0; i <= rowsNumberInTable; i = i + 1000)
{
    ...
    string sql1 =@"SELECT reference, DATE(trx_date) as 'date', chassis_nmbr, status, remarks, approved_by, DATE(date_approved), branch_code FROM jobcomp_hdr LIMIT " + i + @" ," + i+ 1000;
    ...
}

关于c# - 从在线MySql数据库到DataTable的数据不完整,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41584925/

10-13 06:30
查看更多