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.
Found a solution: When using
dataadapter.fill(datatable);
there is no constraints for table. But like in my app, if datatable is loaded by readerdt.Load(rdr);
the constraints is TRUE defaultly. So a dataset with a FALSE constraints instance must be created.