我正在尝试将在线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/