簡體   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