C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 連続してSQLを実行させたい場合


(過去ログ 158 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■91720 / inTopicNo.1)  連続してSQLを実行させたい場合
  
□投稿者/ くれnai (1回)-(2019/07/24(Wed) 10:12:20)

分類:[C#] 

    using (var connection = new SqlConnection(connectionString))
    using (var command = connection.CreateCommand())
    {
        try
        {
            // データベースの接続開始
            connection.Open();
 
            // SQLの実行
            command.CommandText = @"SELECT * FROM T_USER";
            command.ExecuteNonQuery();
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception.Message);
            throw;
        }
        finally
        {
            // データベースの接続終了
            connection.Close();
        }
    }

連続してSQLのコードを実行させたいのですが、どうしたらいいでしょうか?
上記のようなコードがあったとして、update T_USER set flg = ''を実行した後に
delete from T_USER where flg = ''を実行したいとします(このSQLに意味はないのですが)

その場合、1回1回データベースに接続して実行をして切断、また接続してSQLを実行して切断と
3回分上記のようなコードを書けばできるのはわかりますが、コードが長くなってしまうため
何か方法はないでしょうか?

引用返信 編集キー/
■91721 / inTopicNo.2)  Re[1]: 連続してSQLを実行させたい場合
□投稿者/ WebSurfer (1862回)-(2019/07/24(Wed) 10:29:32)
No91720 (くれnai さん) に返信

> その場合、1回1回データベースに接続して実行をして切断、また接続してSQLを実行して切断と
> 3回分上記のようなコードを書けばできるのはわかりますが、コードが長くなってしまうため
> 何か方法はないでしょうか?

DB が SQL Server であるなら、シングルバッチで複数のクエリを実行できるので、
それで問題なければ command.CommandText に複数のクエリを設定すれば良いと思
います。

または、質s門のコードの「// SQLの実行」のところで、command.CommandText を
切り替えつつ実行するというのでどうですか?

何にせよ、トランザクションに束ねる必要がありそうなので、そういう場合は、

> 1回1回データベースに接続して実行をして切断、また接続してSQLを実行して切断

は NG だと思います。
引用返信 編集キー/
■91722 / inTopicNo.3)  Re[1]: 連続してSQLを実行させたい場合
□投稿者/ 魔界の仮面弁士 (2258回)-(2019/07/24(Wed) 11:01:32)
No91720 (くれnai さん) に返信
> 連続してSQLのコードを実行させたいのですが、どうしたらいいでしょうか?

こんな感じ。
https://docs.microsoft.com/ja-jp/dotnet/framework/data/adonet/retrieving-data-using-a-datareader

using (var connection = new SqlConnection(connectionString))
using (var command = connection.CreateCommand())
{
 try
 {
  connection.Open();

  command.CommandText = @"
SELECT COL1, COL2 FROM TBL;
UPDATE TBL SET COL2 = COL2 + 1 WHERE COL1 < 4;
DELETE FROM TBL WHERE COL1 < COL2;
SELECT COL1, COL2 FROM TBL;
";

  var reader = command.ExecuteReader();

  var tbl1 = new DataTable("Before");
  tbl1.Load(reader);
  var tbl2 = new DataTable("After");
  tbl2.Load(reader);

  Console.WriteLine("Before:" + tbl1.Rows.Count);
  Console.WriteLine("Affected:" + reader.RecordsAffected);
  Console.WriteLine("After:" + tbl2.Rows.Count);
 }
 catch (Exception exception)
 {
  Console.Error.WriteLine(exception.Message);
  throw;
 }
 finally
 {
  connection.Close();
 }
}
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -