データベースのデータの変更
データを変更する SQL ステートメント (INSERT、UPDATE、DELETE など) は行を返しません。同様に、多くのストアド プロシージャは、アクションを実行しても行を返しません。行を返さないコマンドを実行するには、適切な SQL コマンドおよび Connection (および必要な Parameters) を持つ Command オブジェクトを作成し、その Command オブジェクトの ExecuteNonQuery メソッドを使用します。
ExecuteNonQuery メソッドは、実行されたステートメントまたはストアド プロシージャの影響を受けた行数を表す整数を返します。複数のステートメントが実行された場合は、実行された各ステートメントの影響を受けたレコードの合計を示す値が返されます。
INSERT ステートメントを実行して、ExecuteNonQuery でデータベースにレコードを挿入するサンプル コードを次に示します。
Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _
"Initial Catalog=northwind")
nwindConn.Open()
Dim insertStr As String = "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')"
Dim insertCMD As SqlCommand = New SqlCommand(insertStr, nwindConn)
Dim recordsAffected As Int32 = insertCMD.ExecuteNonQuery()
[C#]
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;" +
"Initial Catalog=northwind");
nwindConn.Open();
string insertStr = "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')";
SqlCommand insertCMD = new SqlCommand(insertStr, nwindConn);
Int32 recordsAffected = insertCMD.ExecuteNonQuery();
「カタログ操作の実行」のサンプル コードで作成されたストアド プロシージャを実行するサンプル コードを次に示します。ストアド プロシージャは行を返さないため ExecuteNonQuery メソッドが使用されていますが、ストアド プロシージャは入力パラメータを受け取り、出力パラメータと戻り値を返します。
OleDbCommand オブジェクトの場合は、最初に Parameters コレクションに ReturnValue パラメータを追加する必要があります。
Dim insertCatCMD As SqlCommand = New SqlCommand("InsertCategory" , nwindConn)
insertCatCMD.CommandType = CommandType.StoredProcedure
Dim workParm As SqlParameter
workParm = insertCatCMD.Parameters.Add("@RowCount", SqlDbType.Int)
workParm.Direction = ParameterDirection.ReturnValue
workParm = insertCatCMD.Parameters.Add("@CategoryName", SqlDbType.NChar, 15)
workParm = insertCatCMD.Parameters.Add("@Identity", SqlDbType.Int)
workParm.Direction = ParameterDirection.Output
insertCatCMD.Parameters("@CategoryName").Value = "New Category"
insertCatCMD.ExecuteNonQuery()
Dim catID As Int32 = CInt(insertCatCMD.Parameters("@Identity").Value)
Dim rowCount As Int32 = CInt(insertCatCMD.Parameters("@RowCount").Value)
[C#]
SqlCommand insertCatCMD = new SqlCommand("InsertCategory" , nwindConn);
insertCatCMD.CommandType = CommandType.StoredProcedure;
SqlParameter workParm;
workParm = insertCatCMD.Parameters.Add("@RowCount", SqlDbType.Int);
workParm.Direction = ParameterDirection.ReturnValue;
workParm = insertCatCMD.Parameters.Add("@CategoryName", SqlDbType.NChar, 15);
workParm = insertCatCMD.Parameters.Add("@Identity", SqlDbType.Int);
workParm.Direction = ParameterDirection.Output;
insertCatCMD.Parameters["@CategoryName"].Value = "New Category";
insertCatCMD.ExecuteNonQuery();
Int32 catID = (Int32)insertCatCMD.Parameters["@Identity"].Value;
Int32 rowCount = (Int32)insertCatCMD.Parameters["@RowCount"].Value;
参照
.NET Framework データ プロバイダによるデータのアクセス | データベース操作の実行とデータ変更 | OleDbCommand クラス| OleDbConnection クラス | OdbcCommand クラス | OdbcConnection クラス | SqlCommand クラス | SqlConnection クラス