Note that there are some explanatory texts on larger screens.

plurals
  1. POC# Fatal error encoutered during data read
    primarykey
    data
    text
    <p>I'm selecting about 20,000 records from the database and then I update them one by one.<br /> I looked for this error and I saw that setting the CommandTimeout will help, but not in my case.<br /></p> <pre><code> public void Initialize() { MySqlConnectionStringBuilder SQLConnect = new MySqlConnectionStringBuilder(); SQLConnect.Server = SQLServer; SQLConnect.UserID = SQLUser; SQLConnect.Password = SQLPassword; SQLConnect.Database = SQLDatabase; SQLConnect.Port = SQLPort; SQLConnection = new MySqlConnection(SQLConnect.ToString()); } public MySqlDataReader SQL_Query(string query) { MySqlCommand sql_command; sql_command = SQLConnection.CreateCommand(); sql_command.CommandTimeout = int.MaxValue; sql_command.CommandText = query; MySqlDataReader query_result = sql_command.ExecuteReader(); return query_result; } public void SQL_NonQuery(string query) { MySqlCommand sql_command; sql_command = SQLConnection.CreateCommand(); sql_command.CommandTimeout = int.MaxValue; sql_command.CommandText = query; sql_command.ExecuteNonQuery(); } </code></pre> <p>And here is my method which makes the select query:</p> <pre><code> public void CleanRecords() { SQLActions.Initialize(); SQLActions.SQL_Open(); MySqlDataReader cashData = SQLActions.SQL_Query("SELECT `cash`.`id`, SUM(`cash`.`income_money`) AS `income_money`, `cash_data`.`total` FROM `cash_data` JOIN `cash` ON `cash`.`cash_data_id` = `cash_data`.`id` WHERE `user`='0' AND `cash_data`.`paymentterm_id`='0' OR `cash_data`.`paymentterm_id`='1' GROUP BY `cash_data_id`"); while(cashData.Read()){ if(cashData["income_money"].ToString() == cashData["total"].ToString()){ UpdateRecords(cashData["id"].ToString()); } } SQLActions.SQL_Close(); } </code></pre> <p>And here is the method which makes the update:</p> <pre><code> public void UpdateRecords(string rowID) { SQLActions.Initialize(); SQLActions.SQL_Open(); SQLActions.SQL_NonQuery("UPDATE `cash_data` SET `end_date`='" + GetMeDate() + "', `user`='1' WHERE `id`='" + rowID + "'"); SQLActions.SQL_Close(); } </code></pre> <p>Changing the database structure is not an option for me.<br /> I thought that setting the timeout to the maxvalue of int will solve my problem, but is looks like this wont work in my case. Any ideas? :)</p> <p>EDIT: The error which I get is "Fatal error encoutered during data read".</p> <p><br /><br /><br /><br /></p> <p>UPDATE:</p> <pre><code> public void CleanRecords() { StringBuilder dataForUpdate = new StringBuilder(); string delimiter = ""; SQLActions.Initialize(); SQLActions.SQL_Open(); MySqlDataReader cashData = SQLActions.SQL_Query("SELECT `cash`.`id`, SUM(`cash`.`income_money`) AS `income_money`, `cash_data`.`total` FROM `cash_data` JOIN `cash` ON `cash`.`cash_data_id` = `cash_data`.`id` WHERE `user`='0' AND `cash_data`.`paymentterm_id`='0' OR `cash_data`.`paymentterm_id`='1' GROUP BY `cash_data_id`"); while (cashData.Read()) { if (cashData["income_money"].ToString() == cashData["total"].ToString()) { dataForUpdate.Append(delimiter); dataForUpdate.Append("'" + cashData["id"].ToString() + "'"); delimiter = ","; } } SQLActions.SQL_Close(); UpdateRecords(dataForUpdate.ToString()); } public void UpdateRecords(string rowID) { SQLActions.Initialize(); SQLActions.SQL_Open(); SQLActions.SQL_NonQuery("UPDATE `cash_data` SET `end_date`='" + GetMeDate() + "', `user`='1' WHERE `id` IN (" + rowID + ")"); SQLActions.SQL_Close(); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload