0

SQL Server CE と連携する C# アプリケーションを作成していますが、CE の多くの制限の 1 つに遭遇しました。

私のデータベースには、、、およびテーブルがCustomerあります。顧客は多くのリストに登録でき、リストには多くの顧客を含めることができます。そのため、customerlist テーブルをジャンクション テーブルとして使用しています (列は, ,です)。ListCustomerListCustomerListIdCustomerIdListId

設計は、常にすべての顧客がリストされているマスターリストを持っていることです.

したがって、私のコードでは、リストされているすべての顧客をマスター リストに登録するように設定する関数を作成しています。これは私の非常に単純な SQL クエリです。

insert into customerlist (CustomerId, ListId)
values (
(select customerid from customer),
(select 1 from list where ShortDesc='Master'))

このクエリは SQL Server CE では機能しません。私は苦労して、for-each の行ごとのコードを使用しない別の方法を見つけようとしています。どんなアイデアでも大歓迎です。

4

2 に答える 2

1

なぜ使用しないのですか:

INSERT INTO  customerlist (CustomerId, ListId) 
SELECT customerid,1  FROM customer

何か不足していますか?

幸運を。

于 2013-02-05T13:38:54.133 に答える
0

私は解決策を思いつきました。

最初に、マスター リストの ID を取得する C# コマンドを実行しました。

string sqlGetId = "select listid from list where ShortDesc='Master'";
SqlCeCommand cmdGetMasterId = new SqlCeCommand(sqlGetId, DbConnection.ceConnection);
int key = (int)cmdGetMasterId.ExecuteScalar();

次に、そのキーをより単純な 2 番目のクエリで使用しました。

sql2 = "insert into customerlist (CustomerId, ListId) select customerid, " + key + " from customer";
cmd2 = new SqlCeCommand(sql2, DbConnection.ceConnection);
cmd2.ExecuteNonQuery();

パラメーターを使用して SQL コマンドを追加することは常に連結よりも優れていることを認識していますが、このアプリケーションの範囲により、SQL インジェクションは問題になりません。

(簡単な質問/回答で申し訳ありませんが、私はこれが初めてです^^)

于 2013-02-05T14:20:49.837 に答える