जब मैं अपने सी # कोड से रिमोट MySQL पर संग्रहीत प्रक्रिया निष्पादित करता हूं तो मुझे सामान्य त्रुटि मिलती है: "कमांड निष्पादन के दौरान गंभीर त्रुटि का सामना करना पड़ा" कुल विवरण:

MySql.Data.MySqlClient.MySqlException: Fatal error encountered during command execution. --->  MySql.Data.MySqlClient.MySqlException: Fatal error encountered attempting to read the resultset. --->  MySql.Data.MySqlClient.MySqlException: Reading from the stream has failed.
--->  System.IO.EndOfStreamException: Attempted to read past the end of the stream.    at MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count)    at MySql.Data.MySqlClient.MySqlStream.LoadPacket()
--- End of inner exception stack trace ---    at MySql.Data.MySqlClient.MySqlStream.LoadPacket() at MySql.Data.MySqlClient.MySqlStream.ReadPacket() at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)    at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)    at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId)    at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
--- End of inner exception stack trace ---    at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)    --- End of inner exception stack trace ---    at MySql.Data.MySqlClient.MySqlCommand.EndExecuteNonQuery(IAsyncResult asyncResult

)

मेरा सी # कोड:

 internal void InsertUpdateMySql(string connectionstring, string storedprocedure)
    {
        string sLog = "internal void InsertUpdateMySql(string connectionstring, string storedprocedure)";
        MySqlConnection conn = new MySqlConnection();
        int rowsAffected = 0;
        try
        {
            if (!string.IsNullOrEmpty(storedprocedure) && !string.IsNullOrEmpty(connectionstring))
            {
                conn.ConnectionString = connectionstring;
                MySqlCommand cmd = new MySqlCommand(storedprocedure);
                cmd.Connection = conn;
                conn.Open();
                IAsyncResult myResult = cmd.BeginExecuteNonQuery(null, null);
                SetProgressinRichText("In progress\n");
                while (!myResult.IsCompleted)
                {
                    SetProgressinRichText(".");
                }
                rowsAffected = cmd.EndExecuteNonQuery(myResult);
            }
        }
        catch (MySqlException ex)
        {
            this.service.WriteToLog(source, sLog + "\n" + ex.Message + "\n" + ex.StackTrace);
        }
        catch (Exception ex)
        {
            this.service.WriteToLog(source, sLog + "\n" + ex.Message + "\n" + ex.StackTrace);
        }
        finally
        {
            if (conn.State != System.Data.ConnectionState.Closed)
                conn.Close();
        }
    }

सपा उसी तरह:

DELIMITER $$


CREATE  PROCEDURE `SPInsertUpdateCity`( in SP_CityName VARCHAR(100) charset utf8, in SP_CitySynonyms varchar(100) charset utf8, in SP_CityNumberPostOffice varchar(100)) BEGIN   if(not exists(select CityID from city where CityName = SP_CityName)) then      insert into city(CityName, CityNumberPostOffice) values(SP_CityName, SP_CityNumberPostOffice);      insert into citysynonym (CityID, CitySynonymName) values(Last_insert_id(),SP_CitySynonyms);      else if(not exists( select  CitySynonymID from    citysynonym where   CitySynonymName = SP_CitySynonyms)) then    
                insert into citysynonym (CityID, CitySynonymName) values((select cityid from city where CityName=SP_CityName), SP_CitySynonyms);     end if;    end if; END$$

DELIMITER ;

कनेक्शन स्ट्रिंग:

Server=XXXX; Port=XXXX; Database=XXXX; Uid=XXXX;Pwd=XXXX;charset=utf8;default command timeout=7200;

लेकिन जब मैं इसे स्थानीय MySQL पर उत्साहित करता हूं तो यह भी सफल होता है! दूरस्थ mysql के लिए मैंने थोड़ा डेटा (3 रिकॉर्ड) भेजने की कोशिश की और इसे सफलतापूर्वक निष्पादित किया गया, लेकिन बड़े डेटा (1500 रिकॉर्ड) के लिए निष्पादन विफल रहा

7
David Michaeli 14 मार्च 2011, 01:17

2 जवाब

सबसे बढ़िया उत्तर

यदि यहां एक से अधिक ऑपरेशन चल रहे हैं, तो आपके कोड में थ्रेड सुरक्षा समस्याएं हो सकती हैं, और IAsyncResult की IsComplete संपत्ति पर मतदान करने के बजाय AsyncWaitHandle का उपयोग करने से लाभ हो सकता है।

3
Simen S 14 मार्च 2011, 01:53
बहुत बहुत धन्यवाद, मैं कुछ समय जोड़ता हूं (! myResult.IsCompleted) { myResult.AsyncWaitHandle.WaitOne (); } और इसने मेरी समस्या का समाधान कर दिया है! पुन: धन्यवाद।
 – 
David Michaeli
14 मार्च 2011, 23:30

मुझे इस समस्या का सामना करना पड़ा जब मेरी क्वेरी को निष्पादित करने से मेरे MysqlCommand CommandTimeout डिफ़ॉल्ट मान से अधिक लग रहा था। इसलिए मैंने बस उस समय को बढ़ाया और बाद में मुझे ऐसी कोई त्रुटि नहीं थी।

MysqlCommand cmd = new MysqlCommand();
cmd.CommandTimeout = 200;
8
Dylan 11 सितंबर 2012, 11:53