Verwendung einer TimeStamp-Spalte zum Erkennen von Kollisionen Update in ADO.NET mit Visual c# .NET

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 317095 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

In diesem Artikel verwendet ein Microsoft SQL Server- TimeStamp -Feld, um Aktualisierung Konflikte zu erkennen, um die Datenmenge zu verringern, die an den Server gesendet wird. Standardmäßig erstellt das Objekt CommandBuilder ( SqlClientCommandBuilder und OleDbCommandBuilder ) Konflikterkennung auf alle Feldwerten basiert. Verwenden Sie einen benutzerdefinierten UpdateCommand , können Sie nur die Spalten angeben, die Sie verwenden möchten.

Erstellen von SQL Server-Tabellen

Das folgende Skript verwenden, um die Test-Tabelle erstellt und einige Tests Datensätze eingefügt werden:
CREATE TABLE [tblQ317095] (
[ID] int IDENTITY (1,1) NOT NULL, 
[CharData] varchar (10) NOT NULL,
[TimeStampCol] timestamp NULL)
ALTER TABLE [tblQ317095] WITH NOCHECK ADD CONSTRAINT [PK_tblQ317095] PRIMARY KEY ([ID])
INSERT INTO tblQ317095 ([CharData]) VALUES ('AAA')
INSERT INTO tblQ317095 ([CharData]) VALUES ('BBB')
INSERT INTO tblQ317095 ([CharData]) VALUES ('CCC')
				

Erstellen der Visual c# .NET-Anwendung

  1. Erstellen Sie eine neue Visual c# .NET Windows-Anwendung.
  2. Fügen Sie folgenden Steuerelemente an das Formular auf der Registerkarte Windows Forms der Toolbox:
    • Fügen Sie ein Button -Steuerelement als CmdUpdate hinzu.
    • Fügen Sie drei TextBox -Steuerelemente als TxtID , TxtCharData und TxtTimeStamp hinzu. (Festgelegt TxtID und TxtTimeStamp , ReadOnly , um anzuzeigen, dass diese Felder aktualisiert werden können.)
    • Fügen Sie ein DataGrid -Steuerelement.
  3. Verwenden Sie die using -Anweisung für die System und System.Data.SqlClient -Namespaces, damit Sie keine Deklarationen in diesen Namespaces später im Code vornehmen müssen. Fügen Sie den folgenden Code hinzu Abschnitt Allgemeine Deklarationen von Form1:
    using System.Data;
    using System.Data.SqlClient;
    					
  4. Die folgenden Deklarationen der Klasse hinzufügen:
    SqlConnection con = new SqlConnection();
    SqlDataAdapter da;
    DataSet ds = new DataSet();
    SqlCommand daUpdateCommand;
    DataTable dt;
    					
  5. Fügen Sie dem Form_Load -Ereignis den folgenden Code:
    con.ConnectionString = "Server=(local);Database=pubs;Trusted_Connection=yes;";
    con.Open();
    da = new SqlDataAdapter("SELECT * FROM tblQ317095 ORDER BY ID", con);
    daUpdateCommand = new SqlCommand("UPDATE tblQ317095 SET CharData = @pCharData WHERE TimeStampCol = @pTimeStamp",da.SelectCommand.Connection);
    
    //This is the field that you are updating.
    daUpdateCommand.Parameters.Add(new SqlParameter("@pCharData", SqlDbType.VarChar, 10));
    daUpdateCommand.Parameters["@pCharData"].SourceVersion = DataRowVersion.Current;
    daUpdateCommand.Parameters["@pCharData"].SourceColumn = "CharData";
    
    //Use the TimeStamp to locate your row.
    daUpdateCommand.Parameters.Add(new SqlParameter("@pTimeStamp", SqlDbType.Binary));
    daUpdateCommand.Parameters["@pTimeStamp"].SourceVersion=DataRowVersion.Original;
    daUpdateCommand.Parameters["@pTimeStamp"].SourceColumn = "TimeStampCol";
    
    da.UpdateCommand = daUpdateCommand;
    //Fetch the data.
    da.FillSchema(ds, SchemaType.Source, "tblQ317095");
    da.Fill(ds, "tblQ317095");
    dt=ds.Tables["tblQ317095"];
    //Show the data in the textboxes.
    
    txtID.Text = dt.Rows[0][0].ToString() ;
    txtCharData.Text =dt.Rows[0][1].ToString() ;
    txtTimeStamp.Text= dt.Rows[0][2].ToString();
    					
  6. Ändern Sie die ConnectionString -Eigenschaft (die erste Zeile des Codes in Schritt 5), um Ihre SQL Server-Verbindungsinformationen zu entsprechen. Stellen Sie sicher, dass Sie Verbindung mit der Datenbank herstellen, in dem Sie SQL-Skript zum Erstellen der Tabelle Test ausgeführt.
  7. Fügen Sie das CmdUpdate_Click -Ereignis den folgenden Code:
    dt.Rows[0]["CharData"] = txtCharData.Text;
    try
    {
    	da.Update(dt);
    	MessageBox.Show("Update was successful");
    }
    catch (System.Data.DBConcurrencyException dbException)
    {
    	MessageBox.Show(dbException.Message.ToString());
    	DataSet DsModified;
    	DsModified = ds.GetChanges(DataRowState.Modified);
    	dataGrid1.DataSource = DsModified.Tables[0];
    	dataGrid1.CaptionText = "Modified Rows";
    	ds.RejectChanges();
    }
    catch (Exception genException)
    {
    	MessageBox.Show(genException.Message);
    }
    		
    con.Close();			
    					

Die Visual c# .NET Anwendung testen

  1. Führen Sie die Anwendung (die Daten im Form_Load -Ereignis abgerufen wird), klicken Sie im Menü Debuggen auf Starten .
  2. In Query Analyzer (oder Enterprise Manager) das CharData -Feld im Datensatz # 1 auf einen neuen Wert aktualisiert.
  3. Die Anwendung wieder und ändern Sie CharData in einen anderen Wert.
  4. Klicken Sie auf die Schaltfläche, die sich auf dem Formular befindet. Beachten Sie, dass Sie eine Ausnahme empfangen.

Weitere Informationen

Ein TimeStamp -Feld in SQL Server ist ein binärer Wert, der aktualisiert wird, jedes Mal die Zeile aktualisiert wird. Dies ist ein eindeutiger Wert Datenbank systemweiten garantiert. Der Wert ist nicht auf das Datum und Uhrzeit, die die Änderungen aufgetreten verknüpft. Weitere Informationen zur TimeStamp -Felder finden Sie "Verwenden von besonderen Daten" in der SQL Server-Onlinedokumentation.

Informationsquellen

Weitere Informationen finden Sie folgenden Artikel der Microsoft Knowledge Base:
307587Gewusst wie: Aktualisieren eine Datenbank aus einem DataSet-Objekt mit Visual c# .NET
308507Gewusst wie: Aktualisieren eine SQL Server-Datenbank mit dem SqlDataAdapter-Objekt in Visual c# .NET

Eigenschaften

Artikel-ID: 317095 - Geändert am: Donnerstag, 4. September 2003 - Version: 2.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft ADO.NET 1.1
  • Microsoft ADO.NET 1.0
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Keywords: 
kbmt kbhowtomaster kbsqlclient kbsystemdata KB317095 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 317095
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com