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

4

ここでは使用できませんSqlCommandBuilder

DataSet に加えられた変更を調整するために使用される単一テーブル コマンドを自動的に生成します...

ここでのキーワードは「単一テーブル」です。SELECT特定の更新を適用する方法をステートメントからリバース エンジニアリングする方法はありません (たとえばNULL、左結合の右側からすべての列を削除する場合、行を削除するか、各列を null に設定する必要があります。

SqlDataAdapter で適切な Insert、Update、および Delete コマンドを作成する必要があります。

于 2012-09-28T13:52:16.940 に答える
0

内部結合を使用して select ステートメントに DISTINCT を追加します。

これで問題は解決します。

Select Distinct Employee.Ecode のように、.......

于 2015-09-02T11:22:59.493 に答える
0

あなたSqlCommandBuilder が生成することができますCRUD operation on entity

使用の要件は、 を定義Select command before insertingし、select コマンドに含めることprimary Keyです。

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

MSDN の定義 : 更新する Transact-SQL ステートメントを自動的に生成するsingle table

注意 : Update selectCommand で、左結合クエリを定義したため、左結合クエリを作成できます。このクエリを select に置き換えます。

于 2012-09-28T12:31:04.947 に答える