2016-07-31 6 views
0

Ich habe eine SQL Server-Datenbank, die eine Menge Informationen enthält.SQL Server - Tabelle aktualisieren und die aktualisierten Zeilen zurückgeben

Ich möchte Top 50 Zeilen in einer einzigen Abfrage auswählen (was ich tat, ohne Problem), aber dann möchte ich eine Spalte von false auf true aktualisieren, so nächstes Mal wähle ich nicht dasselbe, mein Code sieht wie folgt aus:

string Command = "UPDATE HubCommands SET [Alreadytaken] = 'true' FROM (SELECT TOP 50 [CommandId],[DeviceId],[Commandtext], [HashCommand],[UserId] FROM HubCommands) I WHERE [HubId] = '18353fe9-82fd-4ac2-a078-51c199d9072b'"; 

using (SqlConnection myConnection = new SqlConnection(SqlConnection)) 
{ 
    using (SqlDataAdapter myDataAdapter = new SqlDataAdapter(Command, myConnection)) 
    { 
     DataTable dtResult = new DataTable(); 

     myDataAdapter.Fill(dtResult); 

     foreach (DataRow row in dtResult.Rows) 
     { 
      Guid CommandId, DeviceId, UserId; 
      Guid.TryParse(row["CommandId"].ToString(), out CommandId); 
      Guid.TryParse(row["DeviceId"].ToString(), out DeviceId); 
      Guid.TryParse(row["UserId"].ToString(), out UserId); 

      Console.WriteLine("CommandId" + CommandId); 
     } 
    } 
} 

Dieser Code funktioniert, und es aktualisiert, was ich es zu aktualisieren fragen, aber ich nichts in der Datentabelle nicht bekommen, es ist wie es immer aktualisiert, aber die Auswahl nicht.

Wenn ich eine normale Auswahl mache, funktioniert es und gibt Informationen.

Hat jemand eine Idee, wie man Daten in einer einzelnen Abfrage aktualisiert und erhält?

Antwort

3

So Ihre Frage ist:

Wie kann ich eine Tabelle in SQL Server mit C# aktualisieren und die wirklich aktualisiert Zeilen als Datatable zurückgeben?

Erste Sie haben mehrere Probleme in Ihrer Abfrage.

Sie sollten 1 und 0 verwenden, nicht wahr oder falsch. SQL-Server hat einen bit Datentyp und keinen .

Zweite, das ist, wie Sie Ihre Abfrage erstellt haben sollte:

DECLARE @IDs TABLE 
(
    [CommandId] uniqueidentifier 
); 

INSERT INTO @IDs 
SELECT [CommandId] FROM HubCommands 
WHERE [HubId] = '18353fe9-82fd-4ac2-a078-51c199d9072b' AND [Alreadytaken] = 0; 

UPDATE HubCommands 
SET [Alreadytaken] = 1 
WHERE CommandId IN 
(
    SELECT [CommandId] FROM @IDs 
); 

SELECT * FROM HubCommands 
WHERE CommandId IN 
(
    SELECT [CommandId] FROM @IDs 
); 

Wrap alle oben in einem einzelnen String und SqlDataReader verwenden. Keine Notwendigkeit für einen Adapter in Ihnen Fall (Da wir Befehle abmischen Gegensatz zu, was der Adapter in der Regel der Fall ist):

var sqlCommand = new SqlCommand(Command, myConnection); 
SqlDataReader dataReader = sqlCommand.ExecuteReader(); 

DataTable dtResult = new DataTable(); 
dtResult.Load(dataReader); 

I hoch beraten Sie eine gespeicherte Prozedur zu akzeptieren HubId als Parameter zu erstellen, die alle funktioniert das über der Arbeit. Es ist sauberer und besser für die Wartung.

+0

Danke für die 0und1 Information, ich wusste das nicht. aber das gibt mir immer noch keine Informationen zurück. weißt du, warum? Danke –

+0

@AlonM das ist eine Update-Anweisung. Möchten Sie die aktualisierten Datensätze zurückgeben? – user3185569

+0

Ja. Ich brauche sie, damit ich mit ihnen in meinem Code arbeiten kann, wie Sie können, ich versuche, die Informationen zu Konsole in diesem Code zu schreiben, danke! –

Verwandte Themen