4

1つのデータテーブルが必要なデータベースへのODBC接続があります。テーブルには約20行、数千行のデータがあります。

このテーブルをローカルのSQLServerCEデータベースに挿入して、さらに使用できるようにするつもりです。両方の接続がテストされ、機能しています。

私の試みは、物事を単純にするために1つの列を挿入することでした(C#、プログラミング、およびスタックオーバーフローは初めてです)。

OdbcConnection c = new OdbcConnection(ConnectionString1);
SqlCeConnection d = new SqlCeConnection(ConnectionString2);

c.Open();
d.Open();

string sqlC = "SELECT * FROM ODBCTABLE WHERE ODBCCOLUMN='12345'";
OdbcCommand commandC = new OdbcCommand(sqlC, c);

string sqlD = "INSERT INTO SQLCETABLE(SQLCECOLUMN) VALUES (@sql)";
SqlCeCommand commandD = new SqlCeCommand(sqlD, d);

OdbcDataReader reader = commandC.ExecuteReader();

while (reader.Read())
{
  string x = reader[0].ToString();                   
  commandD.Parameters.Add("@sql",SqlDbType.NVarChar, 5).Value = x;
  commandD.ExecuteNonQuery();     
}

c.Close();
c.Dispose();

d.Close();
d.Dispose();

エラーが発生しますこの名前のSqlCeParameterは、このSqlCeParameterCollectionにすでに含まれています。

  1. なぜこれが間違っているのですか?
  2. これを修正する方法はありますか?
  3. この転送を行うためのより良い方法はありますか?(odbcにはsqlbulktransferは存在しないと思います)
  4. Stackoverflowに最初に投稿したので、質問を正しく投稿しましたか?
4

1 に答える 1

0

コードのこの部分を変更します

commandD.Parameters.Add("@sql",SqlDbType.NVarChar, 5); 
while (reader.Read()) 
{ 
  string x = reader[0].ToString();                   
  commandD.Parameters["@sql"].Value = x ;
  commandD.ExecuteNonQuery();      
} 

問題が発生するのは、すべてのループで、同じ名前のパラメーターをコレクションに追加することを繰り返すと、上記のエラーが発生するためです。
パラメータの作成をループの外に移動し、ループ内の値のみを更新すると、エラーが解決するはずです。

はい、質問を正しく投稿したと思います。

于 2012-09-05T21:12:09.277 に答える