Voici ce que j'ai obtenu: L'utilisateur sélectionne dans une liste de contrôle les noms de bases de données qu'il souhaite archiver. Mettez le boîtier en place pour attraper la sélection.C# SQLDataAdapter - Ne pas insérer de données dans la base de données
case "userSelection":
sqlAdapter = CreateMyAdapter("dbName", true, sqlconn, null);
sqlAdapter.SelectCommand.CommandText += "";
sqlAdapter.Fill(myDS.tableName);
sqlAdapter.Dispose();
L'adaptateur:
private SqlDataAdapter CreateMyAdapter(string TableName, bool IncludeUpdates, SqlConnection sqlConn, SqlTransaction sqlTran)
{
SqlDataAdapter sqlAdapter = null;
SqlConnection sqlConnArchive = new SqlConnection();
strSQL = "SELECT " + TableName + ".* FROM " + TableName;
sqlAdapter = new SqlDataAdapter(strSQL, sqlConn);
// Right here, I create another sqlConnection that is pointed to
// another datasource.
sqlConnArchive = getThisOtherConnection();
SqlCommand sqlComm;
if (IncludeUpdates)
{
string strInsertSQL = "<insertQuery>";
sqlComm = new SqlCommand(strInsertSQL, sqlConnArchive);
sqlComm.Parameters.Add("@TableID", SqlDbType.Int, 0, "TableID");
// More params here...
sqlAdapter.InsertCommand = sqlComm;
// Update
// Delete
}
}
return sqlAdapter;
La question: Comme vous pouvez le voir sqlConn
est la connexion qui est liée à la commande SELECT. Et sqlConnArchive
est lié à l'INSERT. L'idée ici est que je pourrais sélectionner les données de DB_1 si vous voulez, et l'insérer dans DB_2 en utilisant le même SQLDataAdapter. Mais le problème que je rencontre est d'essayer d'insérer. La sélection fonctionne bien, et à cette ligne sqlAdapter.Fill(myDS.tableName);
une fois que le remplissage s'exécute les données sont là. Mais l'INSERT ne fonctionne pas.
Quelques choses:
J'ai testé pour voir si peut-être SQLDataAdapter ne pouvait pas gérer plusieurs sources de données/connexions commutées choses il pointait le même DB tables seulement différentes, et je suis voir les mêmes résultats.
J'ai confirmé que le problème ne réside pas dans la requête INSERT.
Il n'y a pas d'erreur, juste des étapes dans debug.
J'ai essayé plusieurs permutations de
.Update()
et aucune d'elles n'a fonctionné. Ce projet que j'ai été affecté, tout au long de la chose il semble que.Fill();
est ce qui soumet les données à la base de données.J'ai testé le côté de la base de données et la connectivité est un succès. Aucun problème de connexion, etc etc ..
Toute aide est grandement apprécié.
S'il vous plaît noter - J'ai essayé de mettre un accent encore plus grand sur le mot "grandement", mais a été limitée par mon ensemble d'outils. Apparemment, SOF ne prend pas en charge les fichiers en gras, clignotants, soulignés, flammes ou intégrés.
Hey ça a quelque part. Des pensées à ce sujet? "Informations supplémentaires: La requête paramétrée '(@TableID int, @ RowID int, @ otherValue tinyint, @ autreID int, @ somethingElse" attend le paramètre' @TableID ', qui n'a pas été fourni. " Je demande parce que cela est spécifié dans le code: 'SqlParameter SqlParam = sqlComm.Parameters.Add ("@ NewID", SqlDbType.Int, 0, "TableID"); sqlParam.Direction = ParameterDirection.Output; sqlAdapter.InsertCommand = sqlComm;' –
Cette instruction ajoute un paramètre pour '@ NewID' avec la valeur" TableID "Il n'ajoute pas de paramètre pour' @ TableID'.Je pense que vous voulez 'sqlComm.Parameters.Add (" @ TableID ", SqlDbType.Int, 0, tableId)' où 'tableId' est une variable int. –
Hm ok. Eh bien, il semble exiger ceci: 'SqlParameter sqlParam = sqlComm.Parameters.Add (" @ TableID ", SqlDbType.Int, 0," TableID ");'. Mais quand je l'ai défini, il est dit que TableID a déjà été déclaré. Et si je touche n'importe quoi dans sqlComm.Parameters.Add de sqlComm.parameters ("@ TableID", SqlDbType.Int, 0, "TableID"); ', il a la même erreur que ci-dessus excepté avec l'élément de ligne suivant. Donc, au lieu de dire qu'il attend un TableID, il recherche maintenant un RowID, et ainsi de suite. Pensées? –