private bool UpdateDB(int productid) { // データベースを更新する // 更新に成功したらtrue、失敗したらfalseを返す // 検証コントロールを使った入力エラーの検証 this.Validate(); if (!this.IsValid) { // エラーが発見された return false; } // コントロールにユーザーが入力した値を取得 string productname = ProductNameText.Text; // 商品名 string comment = CommentText.Text; // 概要 string detail = DetailText.Text; // 解説 // 以下は、Parseメソッドで例外が発生する可能性があるが // 検証コントロールで書式チェックをしているので // 例外が発生する可能性はなく、ここではtry〜catchでの例外チェックは省略 Decimal price = Decimal.Parse(PriceText.Text); int stocknum = int.Parse(StockList.SelectedValue); // 画像のアップロードがされているかどうか bool imgUpload = false, imgDelete = false; HttpPostedFile postedfile = Request.Files["ImgFile"]; if ((postedfile == null) || (postedfile.ContentLength == 0)) { // 画像のアップロードはされていない // 画像を削除するチェックボックスがtrueかどうか if (ImageDeleteChk.Checked ) { // 画像を削除する imgDelete = true; } } else { // 画像のアップロードがされている imgUpload = true; } // データベースと接続して更新する // コネクションを準備する SqlConnection sqlconn = new SqlConnection(ConfigurationSettings.AppSettings["DSNSTRING"]); // UPDATE文を送信するSqlCommandオブジェクトを用意する string updatequery; updatequery = "UPDATE Products" + " SET productname = @productname, price = @price, stock = @stock, " + " comment = @comment, detail = @detail, lastupdate = CURRENT_TIMESTAMP"; if (imgUpload || imgDelete) { // 画像の削除やアップロードの場合には、imgdata列の更新も加える updatequery += ",imgdata=@imgdata"; } // WHERE句 updatequery += " WHERE id=@id"; SqlCommand sqlcmd = new SqlCommand(updatequery, sqlconn); // パラメータを設定する // 更新となるレコードのID番号 sqlcmd.Parameters.Add("@id", SqlDbType.Int).Value = productid; // 以下、更新データ sqlcmd.Parameters.Add("@productname", SqlDbType.NVarChar, 64).Value = productname; sqlcmd.Parameters.Add("@price", SqlDbType.Money).Value = price; sqlcmd.Parameters.Add("@stock", SqlDbType.Int).Value = stocknum; sqlcmd.Parameters.Add("@comment", SqlDbType.NVarChar, 256).Value = comment; sqlcmd.Parameters.Add("@detail", SqlDbType.NVarChar, 2048).Value = detail; // 画像に対するパラメータ if (imgDelete) { // 画像の削除の場合にはDBNullを設定 sqlcmd.Parameters.Add("@imgdata", SqlDbType.Image).Value = DBNull.Value; } if (imgUpload) { // 画像がアップロードされたときには、その画像を設定 // アップロードされた画像がJPEG形式かどうかを調べる string contenttype = postedfile.ContentType.ToLower(); if (contenttype != "image/jpeg" && contenttype != "image/pjpeg") { // JPEG形式ファイルではない ErrorMessage.Text = "アップロードされた画像は、JPEG形式ではありません"; return false; } // アップロードされたファイルをバイト配列として読み込む try { byte []img = new byte [postedfile.ContentLength]; postedfile.InputStream.Read(img, 0, postedfile.ContentLength); // パラメータとして設定 sqlcmd.Parameters.Add("@imgdata", SqlDbType.Image).Value = img; } catch (Exception ex) { // 何らかのエラーが発生した // ログに書き込む Response.AppendToLog(ex.Message); ErrorMessage.Text = "画像のアップロード処理に失敗しました"; return false; } } // データベースに対して更新をかける int recnum = -1; try { // 接続を開く sqlconn.Open(); // UPDATE文を実行する recnum = sqlcmd.ExecuteNonQuery(); } catch (SqlException ex) { // 何らかのエラーが発生した // エラーをIISのログに記録しておくことにする Response.AppendToLog(ex.Message); } finally { // 接続を閉じる sqlconn.Close(); } if (recnum == 1) { // 更新に成功した return true; } else { // 更新に失敗した ErrorMessage.Text = "データベースへの書き込みに失敗しました"; return false; } }