gpt4 book ai didi

c# - MySqlDataReader: DataTable.Fill(reader) 抛出 ConstraintException

转载 作者:可可西里 更新时间:2023-11-01 07:46:07 24 4
gpt4 key购买 nike

我有两个表 ordersorderdetails

表订单(PK = id,orderno 上的 UNIQUE 索引)

|id|orderno|
| 1|1000 |
| 2|1001 |

表订单详情(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 o.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,但对于连接查询则不是)。

更糟糕的是,这也无济于事:

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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7580929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com