エラーは、DataRowのItemArrayプロパティを文字列に連結しているために発生します。この場合、ItemArray(つまり、オブジェクト[])のインスタンスは、その値から文字列を自動的に生成し、クラス名を文字列 "object []"として返すメソッドを持ちませんが、無意味なSQL文字列を生成します
"insert into SelectedFeeds Values(object[])";
しかし、あなたは、単にのDataTableとアダプタ
string cmdText = @"SELECT FeedLibrary.* INTO [SelectedFeeds]
FROM FeedLibrary
where [email protected]";
using(OleDbConnection Connection = new OleDbConnection(StrCon))
using(OleDbCommand cmd = new OleDbCommand(cmdText, Connection))
{
Connection.Open();
cmd.Parameters.Add("@id", OleDbType.Integer).Value = Convert.ToInt32(frm2.FeedSelectListBox.SelectedValue);
cmd.ExecuteNonQuery();
}
を使用せずに、あなたのために全力を尽くしますSELECT .... INTOステートメントを構築できるしかし、SELECT ... INTO
ステートメントは、ターゲット表を作成しますが、すでにターゲット表場合はエラーになります存在する。この問題を解決するには、ターゲットが存在するかどうかを発見する必要があります。それが存在しない場合、我々はそうでない場合、我々は二つの異なるクエリを持っている。ここINSERT INTO ..... SELECT
// First query, this creates the target SelectedFeeds but fail if it exists
string createText = @"SELECT FeedLibrary.* INTO [SelectedFeeds]
FROM FeedLibrary
where [email protected]";
// Second query, it appends to SelectedFeeds but it should exists
string appendText = @"INSERT INTO SelectedFeeds
SELECT * FROM FeedLibrary
WHERE [email protected]";
using(OleDbConnection Connection = new OleDbConnection(StrCon))
using(OleDbCommand cmd = new OleDbCommand("", Connection))
{
Connection.Open();
// Get info about the SelectedFeeds table....
var schema = Connection.GetSchema("Tables",
new string[] { null, null, "SelectedFeeds", null});
// Choose which command to execute....
cmd.CommandText = schema.Rows.Count > 0 ? appendText : createText;
// Parameter @id is the same for both queries
cmd.Parameters.Add("@id", OleDbType.Integer).Value = Convert.ToInt32(frm2.FeedSelectListBox.SelectedValue);
cmd.ExecuteNonQuery();
}
を使用し、最初のSELECT ... INTO
クエリを使用し、最初のものは以前のようにSelectedFeeds
テーブルを作成し、もう一つはそのテーブルに追加します。
ターゲットテーブルが既に作成されているかどうかを確認するには、Connection.GetSchemaを呼び出して、テーブルSelectedFeeds
が存在する場合は行が存在するデータテーブル(スキーマ)を取得し、テーブルがない場合はテーブルを検索しません。
この時点で、実行する正しいステートメントでOleDbCommandを設定しました。
ありがとう、私は特定のIDを持つFeedLibraryから選択します、それについてはどうですか? – SaraniO
すべての権利が失われ、文字列連結の代わりにパラメータを使用することを追加しました(もちろん、IDフィールドはデータベース上の整数型であると仮定します) – Steve
tnxもう一度私はあなたのコードを試しました。このテーブルにフィードは追加されず、例外は次のとおりです。{"テーブル 'SelectedFeeds'は既に存在します。} – SaraniO