【发布时间】:2019-02-24 08:11:06
【问题描述】:
这个问题与我最近几天在 StackOverflow 上发布的两个问题有关。
关于 MySqlClient EndOfStreamException 的第一个问题。
第一个问题的答案引导我将库从 MySQL ADO.NET 切换到 MySQL 连接器。
自从从 MySQL ADO.NET 迁移到 MySQL 连接器后,我遇到了一些 MySQL 关键字的问题。我也得到了这个问题的答案。
现在程序正在运行,没有任何错误。但不幸的是,有一个问题,因为数据并没有写入数据库。
为了找到解决此问题的方法,我尝试将 "await" 关键字添加到 ExecuteNonQueryAsync() 中,如下代码所示。
private bool OpenConnection()
{
try
{
//connection.Open(); //line commented
**await connection.OpenAsync();**
Console.WriteLine("MySQL connected.");
return true;
}
catch (MySqlException ex)
{
}
public void Insert()
{
if (this.OpenConnection() == true)
{
using(var reader = new StreamReader(@"C:\Users\Admin\source\Bargstedt.csv"))
{
//List<string> listA = new List<string>();
while (!reader.EndOfStream)
{
***await reader.OpenAsync();***
var line = reader.ReadLine();
var values = line.Split(',');
string querynew = "INSERT INTO jobs"
+ "(nJobNumber,strClientReference,datPromisedDelivery)"
+ "VALUES (@jobNo, @strClientName, @strClientReference)";
var cmd = new MySqlCommand();
cmd.CommandText= querynew;
cmd.Parameters.AddWithValue("strClientName", "MySqlDbType.VarChar").Value =(values[1]);
cmd.Parameters.AddWithValue("strClientReference", "MySqlDbType.VarChar").Value = values[2];
***await cmd.ExecuteNonQueryAsync();***
// cmd.ExecuteNonQueryAsync(); //Line commented
}
}
this.CloseConnection();
}
}
在实现这个之前,我认为问题在于执行行,因为任何数据都没有写回数据库。
这就是它说服我在这个example 中同样给出的源代码中包含 await 打开和执行行的原因。
不幸的是,在我使用过的所有地方 await 关键字(在上面的代码中突出显示)都触发了错误:
错误 CS4032 'await' 运算符只能在异步中使用 方法。考虑用'async'修饰符标记这个方法和 将其返回类型更改为“任务”。
如何解决这个问题,您认为数据库没有更新的原因是什么?
如果这个 'await' 方法实现正确,会不会修复?
【问题讨论】:
标签: c# mysql mysql-connector