2016-06-09 8 views
0

Ich arbeite an einer Transaktion Website. Wenn ein Abonnement erstellt wird, wird das Änderungsdatum in die Tabelle eingefügt. Was ich zu erreichen versuche, ist, diesen Datensatz eindeutig zu identifizieren. Hier ist, dass ich versuche:vergleichen sql Datum einfügen und C# Datum Zeit

DateTime currentTime = DateTime.Now; 
Debug.WriteLine("Current Timestamp is: " + currentTime.ToString("yyyy-MM-dd HH:mm:ss:fff")); 

sCmd.CommandText = "SELECT distinct userID FROM table WHERE Report_OID = @reportID AND ModifiedDate = @currentTime"; 
sCmd.Parameters.AddWithValue("@reportID", reportID); 
sCmd.Parameters.AddWithValue("@currentTime", currentTime.ToString("yyyy-MM-dd HH:mm:ss:fff")); 

Output: 

Current Timestamp is: 2016-06-09 10:19:16:586 
Modified Date is: 2016-06-09 10:19:16.553 

dies versucht:

sCmd.CommandText = "SELECT LAST_INSERT_ID();"; 
IDataReader reader = sCmd.ExecuteReader(); 
while (reader != null && reader.Read()) 
{ 
    long lastInsertedID = reader.GetInt64(0); 
    Debug.WriteLine("return id is : " + lastInsertedID); 
} 

Got this error: 
'LAST_INSERT_ID' is not a recognized built-in function name. 

This error may have happened due to the createSubscription method call to create a subscription in the reporting service webservice which handles the insert in the database. I do not have insert statements in my code. 

Dies wird fehlschlagen, da die Millisekunden wird nicht die gleiche sein. Der Grund für die Verwendung von Millisekunden besteht darin, mehrere Benutzer-IDs zu verhindern, wenn zwei Benutzer gleichzeitig ein Abonnement einfügen.

Was ich versuche herauszufinden, vergleichen Sie diese beiden Daten, so kann ich genau die Benutzer-ID meiner Transaktion und keine Sorge um jemand anderes Benutzer-ID greifen, wenn zwei Transaktionen zur gleichen Zeit eingefügt werden. Ist das möglich? Versuche ich das auf die falsche Art zu lösen? Jede Hilfe wird geschätzt. Vielen Dank.

+0

Woher weiß Ihr Code, ob Sie die richtige UserID haben? Fügen Sie einen Datensatz ein und versuchen dann, ihn sofort wieder abzufragen? Sich auf einen Zeitstempel alleine als einen Bezeichner zu verlassen, ist ungewöhnlich, weil es zwar UNBEDINGT unwahrscheinlich ist, dass Sie einen Konflikt haben werden, ist es nicht unmöglich, – DVK

+0

Es gibt einige Probleme damit, da die Benutzer-ID die Sitzungs-ID der sein soll Benutzer bei der Anmeldung. Beim Aufrufen der Methode createSubscription wird eine Eigentümer-ID und nicht die Benutzer-ID des Berichts erstellt. Beim Versuch, die Eigentümer-ID als Benutzer-ID zuzuweisen, gibt es einige Konflikte. Was ich versuche zu prüfen, ist die Überprüfung der Eigentümer-ID, des ausgewählten Berichts und des Zeitstempels, die mir die richtige Eigentümer-ID des Berichts geben sollen. – NepCoder

+0

Und ja, ich versuche, die ID sofort abzufragen. – NepCoder

Antwort

0

Dank @Paparazzi habe ich eine andere Select-Anweisung erstellt, um das neueste Abonnement zu erhalten, indem ich die E-Mail-Adresse verwende und eine Datetime-Variable erstelle, bevor die createSubscription-Methode aufgerufen wurde.

DateTime subscriptionCreateTime = DateTime.Now; 
CreateSubscription(); //Create a new ssrs subscription 

//SQL connection here 
sCmd.CommandText = "SELECT distinct ownerID FROM db.table WHERE Report_ID = @reportID AND ModifiedDate >= @currentTimeStamp AND Description like @emailAddress"; 
sCmd.Parameters.AddWithValue("@reportID", gRptID); 
sCmd.Parameters.AddWithValue("@emailAddress", "%"+tbTO.Text+"%"); 
sCmd.Parameters.AddWithValue("@currentTimeStamp", subscriptionCreatedTime); 
SqlDataReader reader = sCmd.ExecuteReader(); 
0

Verzeihen Sie mir für den Pseudo-Code (ich benutze MySQL nicht oft), aber die richtige Methode, dies zu tun, ist Ihre Eingabe zu ändern, um die Identität des letzten Datensatzes von Ihrer Anweisung zurückgegeben, anstatt zu versuchen, zu entsprechen Dinge mit Timestamps und UserIds. Der Code wird einfacher und zuverlässiger. Dies geschieht in MySQL mit der Funktion LAST_INSERT_ID() (die Approximation der MS SQL-Funktion SCOPE_IDENTITY()).

Beispiel: Ihr Einsatz (in der Tabelle unter der Annahme hat eine Spalte indentity namens „FooID“ könnte wie folgt aussehen:

INSERT INTO Foo (Bar) VALUES ('Biz'); 
SELECT LAST_INSERT_ID(); 

Wenn der neue Datensatz eine FooID von 148 hatte, dann würde Ihre Aussage legen Sie die Aufzeichnung und das Rück 148, an welcher Stelle Sie könnte:

SELECT Bar FROM Foo WHERE FooID = 148; 

das erreichen sollten, was Sie zu tun versuchen

+0

[Fehler] Zusätzliche Information: 'LAST_INSERT_ID' ist kein anerkannter integrierter Funktionsname. – NepCoder

+0

Ich habe keine Insert-Anweisung, ich rufe eine createSubscription-Methode auf, die die Einfügung in der Berichtsdatenbank behandelt. Deshalb habe ich Probleme und muss nach den neu eingefügten Daten fragen. Ich habe mehr Informationen in meinem Code oben hinzugefügt. Ich schätze Ihre Hilfe. – NepCoder

0

zu finden, der Eingänge Sie werden die. Aufzeichnung. Du hast mehrere.