datatable constraintsexception occurs when dt.load(reader)

241 Views Asked by At

I have a project with c# and mysql. For querying, i prepared stored procedures and used

public Sorgulama sp_call(string sp_query, Dictionary<string, object> parameters)
    {
        Sorgulama sorgulama = new Sorgulama();
        sorgulama.hatasiz = true;
        DataTable dt = new DataTable();

        using (var con = new MySqlConnection(myDBstring))
        {

            try
            {
                con.Open();

                using (MySqlCommand cmd = new MySqlCommand(sp_query, con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    if (parameters != null) { 
                        foreach (KeyValuePair<string, object> item in parameters)
                        {
                            object value = new object();
                            cmd.Parameters.AddWithValue(item.Key, item.Value);
                        }
                    }

                    var rdr = cmd.ExecuteReader();

                    dt.Load(rdr);

                    rdr.Close();
                }
            }
            catch (Exception Ex)
            {
                sorgulama.hatasiz = false;
                ///
                string hatalirowlar = "";
                foreach (DataRow dr in dt.GetErrors())
                {
                    hatalirowlar =  hatalirowlar + "\n" + dr.RowError.ToString();
                }
                XtraMessageBox.Show(hatalirowlar);
                ////
                XtraMessageBox.Show("Bağlantı problemi." + Ex.ToString());
            }

            finally
            {
                if (con.State == System.Data.ConnectionState.Open) con.Close();
            }
        }
        sorgulama.obje = dt;
        return sorgulama;
    }

and this is my stored procedure example:

SELECT h.id AS hesapid   FROM `evrak_bordrolar` AS b
LEFT JOIN `hesaplar` AS h ON b.hesapid=h.id;

this procedures have no errors on phpmyadmin or sql applications(like navicat) when some rows have the same values. But it throws constraintexception in c# application.

1

There are 1 best solutions below

0
On

Found a solution: When using dataadapter.fill(datatable); there is no constraints for table. But like in my app, if datatable is loaded by reader dt.Load(rdr); the constraints is TRUE defaultly. So a dataset with a FALSE constraints instance must be created.

var rdr = cmd.ExecuteReader();
using (DataSet ds = new DataSet() { EnforceConstraints = false })
     {
      ds.Tables.Add(dt);
      dt.Load(rdr);
     }