C#のsqlcommandの使い方

4762 ワード

sqlcommandクラスは、SQL Serverデータベースに対して実行するTransact-SQL文またはストレージ・プロシージャを表します.
このレッスンでは、SqlCommandオブジェクトとデータベースとのインタラクションについて説明します.次に、このレッスンの目的を示します.commandオブジェクト学習とは、ExecuteReaderメソッドを使用してデータをクエリーする方法を学習します.ExecuteNonQueryメソッドを使用してオブジェクトを挿入および削除する方法を学習します.EXecuteScaleメソッドを使用して単一の値を返す方法について説明します.SqlCommandオブジェクトでは、データベースで実行する操作のタイプを指定できます.たとえば、データベース内のロー・データに対してselect、insert、modify、deleteコマンドを実行できます.SqlCommandオブジェクトは、接続データ管理の切断をサポートするために使用できますが、このレッスンではSqlCommandオブジェクトのみを単独で使用します.SqlDataAdapterのレッスンでは、切断データを使用してアプリケーションを実装する方法について説明します.このレッスンでは、テーブルに記録された数など、データベースから個別の値を返す方法も示します.SqlCommandオブジェクトの作成
SqlCommand cmd = new SqlCommand("select CategoryName from Categories", conn);

上の行は、典型的なSqlCommandオブジェクトをインスタンス化するコードです.stringパラメータを使用して、実行するコマンドとSqlConnectionオブジェクトに関する参照を保存します.SqlCommandにはリロード形式があります.これらの形式は後述する例で参照してください.
クエリーデータSQLのselectコマンドを使用すると、データセットのセットが得られます.SqlCommandオブジェクトと組み合わせて使用するには、ExecuteReaderメソッドを使用して、SqlDataReaderオブジェクトを返します.SqlDataReaderについては後述する.次の例では、SqlCommandオブジェクトを使用してSqlDataReaderオブジェクトを得る方法を示します.
// 1. Instantiate a new command with a query and connection
SqlCommand cmd = new SqlCommand("select CategoryName from Categories", conn);
// 2. Call Execute reader to get query results
SqlDataReader rdr = cmd.ExecuteReader();
//3.use while to get the data from sqldatareader
while(rdr.read())
{
   Console.writeline(rdr(0));
}

上記の例では、コマンド文字列コア接続オブジェクトをコンストラクション関数に渡すことでSqlCommandオブジェクトを実体化しています.次に,SqlCommandオブジェクトcmd呼び出しExecuteReaderメソッドによりSqlDataReaderオブジェクトを得た.
これらのコードは表1のReadDataメソッドの一部であり,後述する.データを挿入データベースにデータを挿入するには、SqlCommandオブジェクトのExecuteNonQueryメソッドを使用します.次のコードは、データベース・テーブルにデータを挿入する方法を示します.
string insertString = @"insert into Categories(CategoryName, Description)values (
'Miscellaneous', 'Whatever doesn''t fit elsewhere')";
 SqlCommand cmd = new SqlCommand(insertString, conn);
 cmd.ExecuteNonQuery();

SqlCommandのインスタンス化過程は以前見たものといくつかの違いがあるが,基本的に一致している.コンストラクション関数の最初の文字列パラメータでは、3文字列の文字面値ではなく文字列変数を挿入するために使用されます.この変数はSqlCommand宣言の前に宣言された.注意insertStringテキストの「doesn’’t」の2つの単一引用符(’)です.これは、適切な単一引用符に変換されます.もう1つ注意しなければならないのは、CategoryNameとDescriptionの列を明示的に示すことです.リストにCategoryIDというプライマリ・キーがあります.SQL Serverがこのフィールドを自動的に追加するため、この列は無視されます.CategoryIDなどのプライマリ・キーに値を追加しようとすると、例外が発生します.このコマンドを実行するために、SqlCommandエンティティcmdに対してExecuteNonQueryメソッドを簡単に呼び出します.このコードは表1のInsertDataメソッドの一部であり,更新データExecuteNonQueryメソッドが同様にデータを更新するために用いられることについては後述する.次のコードは、データの更新方法を示しています.
 string updateString = @"update Categories set CategoryName = 'Other'
 where CategoryName = 'Miscellaneous'";
 SqlCommand cmd = new SqlCommand(updateString);
 cmd.Connection = conn;
 cmd.ExecuteNonQuery();

データを削除するには、ExecuteNonQueryメソッドを使用してデータを削除することもできます.次の例では、EXecuteNonQueryメソッドを使用してデータベース内のレコードを削除する方法を示します.
 string deleteString = @"delete from Categories where CategoryName = 'Other'";
 SqlCommand cmd = new SqlCommand();
 cmd.CommandText = deleteString;
 cmd.Connection = conn;
 cmd.ExecuteNonQuery();

この例では、パラメータのないSqlCommandコンストラクタを使用します.代わりにCommandTextとSqlCommandオブジェクトの接続プロパティが明示的に設定されています.同様に、SqlCommandコンストラクション関数を使用して、コマンドを挿入または更新するために前の2つのリロード形式で同じ結果を得ることができます.コマンドテキストを変更したり、接続オブジェクトを変更したりできることを示します.ExecuteNonQueryメソッド呼び出しは、コマンドをデータベースに渡します.単一の値を取得するときに、データベースから1つの値だけを取得したい場合があります.これは、データセットのカウント、および、平均値、または他の集約値に関する可能性があります.ExecuteReaderメソッドを使用してコードの結果を計算することは、これらのことをする有効な方法ではありません.最良の選択は、データベースが実行でき、必要な個別の値だけを返すことです.次の例では、ExecuteScaleメソッドを使用して実装する方法を示します.
SqlCommand cmd = new SqlCommand("select count(*) from Categories", conn);
int count = (int)cmd.ExecuteScalar(); 

SqlCommandオブジェクトをまとめると、コマンドを消去してデータベースに転送できます.異なるコマンドに対して特定の方法が含まれています.ExecuteReaderメソッドは、クエリの結果を現実的に返すためにSqlDataReaderオブジェクトを返します.Insert、update、deleteなどのSQLコマンドでは、ExecuteNonQueryメソッドを使用します.クエリの個別集計値のみが必要な場合は、ExecuteScaleメソッドが最適です.