J'essaie d'obtenir les données qui ont été entrées avec succès dans la base de données via la transaction ADO.NET. Une fois que vous avez appelé trans.Commit(), il ne semble pas possible de récupérer les données qui ont été validées car toutes les colonnes d'identité créées lors de la transaction sont "virtuelles" car il s'agit d'un ensemble de données hors ligne jusqu'à ce que commitComment accéder aux données qui ont été insérées à l'aide d'une transaction ADO.NET?
un grand merci
[EDIT]
Ahh, le problème est, je ne peux pas faire Resélectionner que je n'ai rien unique de choisir sur autre que l'identité de les données insérées dans le cadre de la transaction.
Je ne peux pas le dernier élément entré comme c'est un système multi-utilisateur
Exemple de code d'un livre, pas le code en question, mais assez bon pour illustrer ce que je dois:
using System.Data;
using System.Data.SqlClient;
namespace DataAdapterTransaction
{
class Program
{
private static string sqlConnectString = "Data Source=(local);" +
"Integrated security=SSPI;Initial Catalog=AdoDotNet35Cookbook;";
private static string sqlSelect = "SELECT * FROM DataAdapterTransaction";
static void Main(string[] args)
{
object[,] o1 = {{ "1", "field 1.1", "field 2.1" },
{ "2", "field 1.2", "field 2.2" }};
InsertRecords(o1);
object[,] o2 = {{ "3", "field 1.3", "field 2.3" },
{ null, "field 1.4", "field 2.4" }};
InsertRecords(o2);
// Retrieve and output the contents of the table
SqlDataAdapter daRead = new SqlDataAdapter(sqlSelect, sqlConnectString);
DataTable dtRead = new DataTable();
daRead.Fill(dtRead);
Console.WriteLine("---TABLE DataAdapterTransaction---");
foreach (DataRow row in dtRead.Rows)
Console.WriteLine("Id = {0}\tField1 = {1}\tField2 = {2}",
row["Id"], row["Field1"], row["Field2"]);
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
static void InsertRecords(object[,] o)
{
DataTable dt = new DataTable();
SqlTransaction tran;
SqlConnection connection = new SqlConnection(sqlConnectString);
// Create a DataAdapter
SqlDataAdapter da = new SqlDataAdapter(sqlSelect, connection);
// Stop updating when an error is encountered for roll back.
da.ContinueUpdateOnError = false;
// Create CommandBuilder and generate updating logic.
SqlCommandBuilder cb = new SqlCommandBuilder(da);
// Create and fill a DataTable with schema and data
da.Fill(dt);
// Open the connection
connection.Open();
// Begin a new transaction and assign it to the DataAdapter
tran = connection.BeginTransaction();
da.SelectCommand.Transaction = tran;
// Add two rows that will succeed update
for (int i = 0; i <= o.GetUpperBound(0); i++)
{
dt.Rows.Add(new object[] { o[i, 0], o[i, 1], o[i, 2] });
Console.WriteLine(
"=> Row with [Id = {0}] added to DataTable.", o[i, 0]);
}
Console.WriteLine("=> Updating data source using DataAdapter.");
try
{
da.Update(dt);
tran.Commit();
Console.WriteLine("\nTRANSACTION COMMIT.\n");
}
catch (Exception ex)
{
tran.Rollback();
Console.WriteLine("\nTRANSACTION ROLLBACK.\n{0}\n", ex.Message);
}
finally
{
connection.Close();
}
}
}
}
Ok, donc ce que je veux est juste après la validation de la transaction, je veux obtenir l'identité (portée) de la dernière ligne insérée.
Mon application a réussi à mettre à jour trois DataAdapters dans le cadre de la transaction, mais j'ai recherche dificulty les données validées finales. Je peux faire un choix de la table et le voir là-bas, mais ce n'est vraiment pas assez bon pour le code de production.
SC
pouvez-vous poster votre code? –