2

I tried to add a new row to a Table in an SQL DB, but I had a problem :

dynamic sql generation is not supported against multiple base tables

this is the code I tried :

private MyClass myClass = new MyClass();
private SqlDataAdapter adapter;
private SqlDataAdapter adapter2;

private void GestionCollections_Load(object sender, EventArgs e)
{
     adapter = new SqlDataAdapter("select Id_Collection ID, Libelle_Collection Collection,Libelle_Editeur Editeur from Collection_ left join Editeur on Id_Editeur = Collection_.Id_Editeur_Editeur", myClass.cnx);
     adapter.Fill(myClass.ds, "Collection_");

     adapter2 = new SqlDataAdapter("Select Id_Editeur ID,Libelle_Editeur Editeur from Editeur", myClass.cnx);
     adapter2.Fill(myClass.ds, "Editeur");
}

private void AjouterBarButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
    String newKeyWordCollectionName = ajoutCollection.KeyWordCollectionName;
    String newKeyWordAEditeurName = ajoutCollection.KeyWordEditeurName;        
    DataRow row = myClass.ds.Tables["Collection_"].NewRow();
    row[1] = newKeyWordCollectionName;

    foreach(var myRow in myClass.ds.Tables["Editeur"].AsEnumerable())
    {
         if (newKeyWordAEditeurName == myRow[1] as String)
              row[2] = (int)myRow[0];
    }
     myClass.ds.Tables["Collection_"].Rows.Add(row);
     SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
     adapter.Update(myClass.ds, "Collection_");

}
4

4 回答 4

5

更改您的选择查询并添加不同的内部联接。

例如有两个查询,您可以从中了解我想告诉您的内容

错误查询

select iop.pob_id, iop.pob_product_id, iop.pob_qty, iop.pob_unit_id
    , iop.pob_rate, iop.pob_value, iop.pob_fiscalyear_id
    , **p.product_desc** as orderBy from inv_product_open_balc iop
left join inv_product p on iop.pob_product_id = p.product_id
where p.product_desc like 'Air Freshner%' and iop.pob_fiscalyear_id = 3

正确查询

select distinct iop.pob_id, iop.pob_product_id, iop.pob_qty
    , iop.pob_unit_id, iop.pob_rate, iop.pob_value, iop.pob_fiscalyear_id
    , **(select Product_desc from** inv_product p where p.product_id = iop.pob_product_id )as orderBy
from inv_product_open_balc iop
inner join inv_product p on iop.pob_product_id = p.product_id
where p.product_desc like 'Air Freshner%' and iop.pob_fiscalyear_id = 3
于 2016-09-15T08:03:03.493 回答
4

你不能在SqlCommandBuilder这里使用:

自动生成单表命令,用于协调对 DataSet 所做的更改与...

这里的关键词是“单表”。它无法从SELECT语句中逆向工程应该如何应用特定更新(例如,如果您NULL从左连接右侧的所有列,它应该删除该行,还是将每列设置为空。

您需要在 SqlDataAdapter 上编写适当的插入、更新和删除命令。

于 2012-09-28T13:52:16.940 回答
0

有了SqlCommandBuilder 你可以生成CRUD operation on entity

使用要求是Select command before inserting在选择命令中定义并包含您的primary Key.

链接: http: //msdn.microsoft.com/fr-fr/library/system.data.sqlclient.sqlcommandbuilder (v=vs.80).aspx

MSDN 定义:自动生成 Transact-SQL 语句进行更新single table

注意:在您的更新 selectCommand 中,您定义了左连接查询,因此您可以创建左连接查询,将此查询替换为仅选择。

于 2012-09-28T12:31:04.947 回答
0

使用内部联接在您的选择语句中添加 DISTINCT。

这将解决问题。

比如选择不同的员工.Ecode,......

于 2015-09-02T11:22:59.493 回答