2016-07-31 6 views
0

多くの情報を内部に持つSQL Serverデータベースがあります。SQL Server - テーブルを更新し、更新された行を返します。

単一のクエリ(問題はありませんでした)で上位50行を選択したいのですが、次に列をfalseからtrueに更新したいので、次回は同じコードを選択しません次のようになります。

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); 
     } 
    } 
} 

このコードでは、作業を行い、そしてそれは私が更新するために、それを聞いて何を更新しますが、私は、データテーブルに何を取得していない、そのことは常に更新しますが選択されていませんように。

私が通常の選択をすると、正常に動作し、情報が得られます。

更新プログラムを使用してデータを取得する方法はありますか?

答えて

3

だからあなたの質問は次のとおりです。

どのように私はC#を使用して、SQL Serverのテーブルを更新したDataTableとして真に更新 行を返すことができますか?

最初質問には複数の問題があります。

10をtrueまたはfalseにする必要があります。 SQLサーバーのデータ型はbitで、Booleanではありません。

第二、これはあなたのクエリを構築してきた方法を次のとおりです。

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 
); 

つの文字列に上記のすべてをラップしてSqlDataReaderを使用しています。あなたの場合はアダプタが必要ありません(私たちは、アダプタは通常、何をするかとは違って、コマンドを配合しているので)いいえ:

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

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

私は非常にすべてのないパラメータとしてHubIdを受け入れるストアドプロシージャを作成するためにをアドバイス上記の仕事。それはメンテナンスのために清潔で、より良いです。

+0

0and1情報をありがとう、私はそれを知らなかった。しかし、これはまだ私にいかなる情報も返さない。なぜなのかご存知ですか?ありがとう –

+0

@ AlonMこれは更新ステートメントです。更新されたレコードを返却しますか? – user3185569

+0

はい。私はそれらが私のコードでそれらと一緒に作業することができますので、私はこのコードでコンソールに情報を書き込もうとしているように、ありがとう! –

関連する問題