Je développe une application Windows Form C# et j'ai besoin d'insérer un enregistrement dans une table, puis relire l'identité de l'enregistrement et transmettre cette identité à une autre partie du programme. Voir le code ci-dessous.Comment lire l'identité d'un enregistrement inséré dans une table de base de données avec Pervasive SQL?
L'ID_COLUMN est d'identité de type PSQL. Remarque:
Le langage Pervasive ne prend pas en charge SCOPE_IDENTITY. Dans la documentation, @@ identity renvoie la valeur de la dernière colonne Identity insérée. Si la table n'a pas de colonne d'identité, @@ identity renverra null. Si vous avez deux insertions, l'identité @@ renvoie la dernière valeur insérée.
Autres notes: La version omniprésente est v11 et utilise le fournisseur de données fourni avec Pervasive.
using Pervasive.Data.SqlClient;
int newIdentity = 0;
string connectionString =
"Server Name=myServerAddress;Database Name=myDataBase;User ID=myUsername;"
PsqlConnection connection = new PsqlConnection(connectionString);
string insertStatment=
"INSERT INTO TABLE_1 (ID_COLUMN, DATA_COLUMN_1, DATA_COLUMN_2) " +
" VALUES (0, 'My First Name', 'My Last Name')";
try{
PsqlCommand insertCommand = new PsqlCommand(insertStatment,connection);
connection.Open();
int rowCount = insertCommand.ExecuteNonQuery();
if (rowCount > 0)
{
string selectIdentityStatment =
" SELECT @@IDENTITY FROM TABLE_1 ";
PsqlCommand selectIdentity =
new PsqlCommand(selectIdentityStatment, connection);
newIdentity =
(int)selectIdentity.ExecuteScalar(); // THIS IS RETURNING NULL
}
else
{ // nothing was inserted
// newIdentity = 0
}
}
Finally {
Connection.Close();
}
Toute aide serait grandement appréciée.
J'ai exécuté votre code contre mon serveur PSQL v11.30 et il a renvoyé la valeur correcte pour l'identité. Quelle version exacte de PSQL utilisez-vous? Quelle est la version de Pervasive.Data.SqlClient.DLL que vous utilisez? – mirtheil
Pervasive.Data.SqlClient.DLL Runtime Version v2.0.50727, Version 4. J'utilise .NET frame work 4.0 –
Aussi - ce code fonctionne sur notre base de données de test. Lorsque nous nous connectons à nos données en direct, c'est quand les problèmes commencent. Parfois, cela va réussir, mais la plupart du temps, il échoue (à ce jour). Je suis blessé s'il y a un autre utilisateur ou processus qui intervient et crée un enregistrement, provoquant que le @ @ Identity Global soit mis à null avant que je puisse le relire. Est-ce que c'est possible? Et comment voulez-vous contourner la possibilité? –