2012-09-05 12 views
4

J'ai une connexion ODBC à une base de données dont j'ai besoin d'une table de données. La table contient environ 20 lignes et quelques milliers de lignes de données.Récupération de la table ODBC et insertion dans la base de données SQL Server CE

J'ai l'intention d'insérer cette table dans ma base de données SQL Server CE locale, où je peux la réutiliser. Les deux connexions ont été testées et fonctionnent.

Ma tentative consistait simplement à insérer une colonne pour garder les choses simples (je suis nouveau sur C#, programmation et stackoverflow).

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(); 

Je reçois l'erreur Le SqlCeParameter avec ce nom est déjà contenue par cette SqlCeParameterCollection.

  1. Pourquoi est-ce faux?
  2. Y at-il un moyen de résoudre ce problème?
  3. Y a-t-il de meilleures façons de faire ce transfert ? (Je crois que sqlbulktransfer n'existe pas pour odbc)
  4. Étant mon premier article sur Stackoverflow, est-ce que je suis allé à propos de la publication d'une question correctement?

Répondre

0

Modifier cette partie de votre code

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

Le problème se pose parce que, dans chaque boucle, vous répétez l'ajout du même paramètre nommé à la collection qui entraîne l'erreur ci-dessus.
Déplacer la création du paramètre en dehors de la boucle et mettre à jour uniquement la valeur à l'intérieur de la boucle devrait résoudre l'erreur.

Oui, je pense que vous avez posté la question correctement.

Questions connexes