繁体   English   中英

致命错误的C#Mysql

[英]C# Mysql with Fatal error

该脚本在工作台中可以正常工作,但是当我在C#中使用该脚本时,会收到“ 命令执行期间遇到致命错误 ”。

我看不到错误,但我相信是“ @”引起的

cmd.CommandText = "CREATE TABLE temp_update_table (matricula VARCHAR(50) NOT NULL, nome VARCHAR(150) NOT NULL, cargo VARCHAR(50) NOT NULL, nasc VARCHAR(50) NOT NULL, admissao VARCHAR(50) NOT NULL, cpf VARCHAR(50) NOT NULL, status VARCHAR(50) NOT NULL);";
cmd.ExecuteNonQuery();
cmd.CommandText = @"LOAD DATA LOCAL INFILE '//10.5.0.2/c$/dhcp.txt' INTO TABLE temp_update_table FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES (@col1, @col2) set matricula = @col1, nome = @col2;"; 
cmd.ExecuteNonQuery();

当我执行以下脚本时,它可以工作:

Cmd.CommandText = "LOAD DATA LOCAL INFILE '//10.5.0.2/c$/dhcp.txt' INTO TABLE temp_update_table FIELDS TERMINATED BY ';' LINES TERMINATED BY '\\n' IGNORE 1 LINES;";

但是当我结束时,它会生成错误“ 命令执行期间遇到致命错误。 ”:

... LINES (@col1, @col2) set matricula = @col2, name = @co1;";

我正在使用MySQL数据库构建.NET C#应用程序,但我也一直遇到错误消息:

“命令执行期间遇到致命错误。”

从我的.NET应用程序调用“ LOAD DATA INFILE” MySQL命令时。 很难找到解决方案,因此我想在这里以对我有用的解决方案做出回应。 最终,在阅读了几天我可以找到的有关该问题的所有信息(包括这篇文章)之后,我得以解决...并且该解决方案无论如何都不直观,最终成为两个不同的问题!

我发现的第一个解决方法是,当您在INFILE中使用变量时,需要在连接字符串中添加以下语句(信不信由你):

"Allow User Variables=True;"

因此,这意味着您的完整连接字符串应如下所示:

"server=127.0.0.1;uid=user;pwd=password;database=mysql_db_name;Allow User Variables=True"

这让我感到惊讶,但似乎可以正常工作! 我在这里找到了解决方案: 命令执行期间遇到MySQL致命错误-遍历文件夹中的所有csv文件以加载数据本地infile

但是,修改连接字符串后,尽管大多数输入文件开始为我工作,但我还是间歇性地收到此错误消息。 对于某些输入文件而不是其他输入文件,我会收到错误消息“命令执行期间遇到致命错误”? 在阅读了更多内容并玩弄了一切之后,即使错误消息没有说明任何有关连接超时的问题,连接超时(或类似的奇怪问题)似乎仍然是一个问题。 通过增加C#数据库“ MySqlCommand”对象的“ CommandTimeout”属性,我能够阻止弹出错误消息并正确将数据文件导入MySQL,如下所示:

mysqlCommand.CommandTimeout = 600;

因此,完整的代码如下所示:

string strConnect = "server=127.0.0.1;uid=user;pwd=password;database=mysql_db_name;Allow User Variables=True";
Using (MySqlConnection mysqlConnection = new MySqlConnection(strConnect))
{
    Using (MySqlCommand mysqlCommand = new MySqlCommand())
    {
        mysqlCommand.CommandTimeout = 600;
        mysqlCommand.Connection = mysqlConnection;
        mysqlCommand.CommandType = CommandType.Text;

        mysqlCommand.CommandText = "LOAD DATA INFILE (...your specific command here)";

        try
        {
            mysqlConnection.Open();
            mysqlCommand.ExecuteNonQuery();
            mysqlConnection.Close();
        }
        catch(Exception ex)
        {
            // handle errors
        }
    }
}

在阅读这篇文章后,我找到了一个特定的解决方案: 源于MySQL ExecuteNonQuery导致的“致命错误”?

无论如何,我认为这是解决问题所需的一切。 希望这些信息对您也有帮助。 祝您好运,编码愉快!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM