c# – MySqlDataReader:DataTable.Fill(reader)抛出ConstraintException
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – MySqlDataReader:DataTable.Fill(reader)抛出ConstraintException,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2571字,纯文字阅读大概需要4分钟。
内容图文
![c# – MySqlDataReader:DataTable.Fill(reader)抛出ConstraintException](/upload/InfoBanner/zyjiaocheng/901/3144c2341324416caaeeb53bfcded051.jpg)
我有两个表订单和orderdetails
表顺序(PK = id,orderno上的UNIQUE索引)
|id|orderno|
| 1|1000 |
| 2|1001 |
table orderdetails(PK = id)
|id|orderid|item|qty|
| 1| 1|ABC | 3|
| 2| 1|XYZ | 4|
现在我想查询数据:
SELECT o.orderno, od.item, od.qty
FROM orders o
INNER JOIN orderdetails od ON.orderno = od.order
返回:
|orderno|item|qty|
|1000 |ABC | 3|
|1000 |XYZ | 4|
但是,如果我使用以下代码将结果加载到DataTable中,它将失败:
var connectionString = "Server=localhost;Database=orders;Uid=root;";
var commandText = "SELECT o.orderno, od.item, od.qty" + Environment.NewLine +
"FROM orders o" + Environment.NewLine +
"INNER JOIN orderdetails od ON o.orderno = od.order";
var reader = MySqlHelper.ExecuteReader(connectionString, commandText);
var table = new DataTable("OrdersQuery");
table.Fill(reader); // throws ConstraintException
问题是,那
table.Constraints[0]
是orderno列上的UniqueConstraints.可能是因为
reader.GetSchemaTable()
对于orderno有一个IsUnique = true条目(在基表中为true,但对于连接查询不是true).
更糟糕的是,这也无济于事:
table.BeginLoadData(); // msdn docs claim that this should disable constraints
table.Load(reader);
table.EndLoadData();
任何想法如何解决这一问题?
堆栈跟踪:
System.Data.ConstraintException Was Unhandled.
Message=Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
Source=System.Data
StackTrace:
bei System.Data.DataTable.EnableConstraints()
bei System.Data.DataTable.set_EnforceConstraints(Boolean value)
bei System.Data.DataTable.EndLoadData()
bei System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
bei System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
bei System.Data.Common.LoadAdapter.FillFromReader(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
bei System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler errorHandler)
bei System.Data.DataTable.Load(IDataReader reader)
解决方法:
我有同样的问题,但通过使用此帖子的解决方法得到修复:http://bugs.mysql.com/bug.php?id=65065(在底部):
cmd.CommandText = "SELECT cam.no_serie, t.mnt FROM trx t LEFT JOIN camn cam USING(id_camn) ";
MySqlDataReader dr = cmd.ExecuteReader();
DataSet ds = new DataSet();
DataTable dataTable = new DataTable();
ds.Tables.Add(dataTable);
ds.EnforceConstraints = false;
dataTable.Load(dr);
dr.Close();
内容总结
以上是互联网集市为您收集整理的c# – MySqlDataReader:DataTable.Fill(reader)抛出ConstraintException全部内容,希望文章能够帮你解决c# – MySqlDataReader:DataTable.Fill(reader)抛出ConstraintException所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。