質問編集履歴

3 タイトル編集

taketake221

taketake221 score 11

2016/10/02 18:18  投稿

質問回答の更新プログラムでFormView-EditItemTemplateでの編集に応じてデータベースを同時更新したい。
ASP.NET FormView-EditItemTemplateでの編集に応じてデータベースを同時更新したい。
質問タイトルがわかりにくいかもしれません。ご勘弁ください。
ASP.NET Webフォームアプリに関する質問です。
演習で、データベースを更新できるしくみを実装中です。
(実装機能については以前させていただいた[こちら](https://teratail.com/questions/47235)の質問で記載していたものと類似していますが、構成や機能が一部異なりましたので、新たに質問させていただきました。)
※OSはWindows7、.NET Framework4、Visual Stdio 2010、SQLserver2012、IE11を利用しています。
![イメージ説明](1ee95bb5129817b133c93901a55d8066.png)
更新先のテーブル構成は以上のような感じで、
result1~result5 には"はい"、"いいえ"、"未回答"の回答いずれかが、
pointには格納された回答に応じた点数(各回答が「はい」ならpoint+1、「いいえ」ならpoint-1、「未回答」なら加減なしで判定し、最終値を格納)が、dateには格納日が格納されます。
「編集」ボタンをおすと、フォームビューで表示した過去の回答(ラベルコントロールの内容)をもとに、
ドロップダウンリストで回答が可能になります。
![イメージ説明](0b094d4f4f5277ef92af1a02ad5f15bb.png) ![イメージ説明](4cfbabfe7e9b47ce76dd461b832b99be.png)
「登録」ボタンを押すと、ドロップダウンリストで選択された回答によってポイントを計算し、日付とともに同時にデータベースに格納したいのですが、どのように記述すればよいのでしょうか。
10/02 17:00編集(タイトル変更)
```
Select Case DropDownList1.DirectCast(FormView1.FindControl("DropDownList1"), DropDownList).SelectedValue
```
の記述で、目に見えるエラーは改善されたようですが、
データベース上ではresult1~result5までの回答データが更新されるだけで、点数(point)と日付(date)は更新がなされない状況です。
10/2 17:30編集
```ここに言語を入力
strSQL = "UPDATE tbl_testRg" &
" SET point = " & point & "," &
" date = " & "'" & dtToday & "'" &
" WHERE 更新先フィールドのID(記述方法がわかりません)"
```
の部分で「& "'" & dtToday & "'" &」の記述にミスがあり、改善したところ、
テスト用にWHERE ID = 1としてID:1のデータ編集の場合のみ正常に動作することが確認できました。
元にするフィールドのIDをここでどう記述すればよいのかがわかりませんので、教えていただきたいです。
```VB
Protected Sub FormView1_ItemUpdating(sender As Object, e As System.Web.UI.WebControls.FormViewUpdateEventArgs) Handles FormView1.ItemUpdating
Dim point As Integer
Dim dtToday As DateTime = Date.Today
/・・・質問5つ分(繰り返し文は不問とします)・・・/
Select Case DropDownList1.DirectCast(FormView1.FindControl("DropDownList1"), DropDownList).SelectedValue
Case "はい"
point = point + 1
Case "いいえ"
point = point - 1
End Select
Dim strSQL As String
strSQL = "UPDATE tbl_testRg" &
" SET point = " & point & "," &
" date = " & "'" & dtToday & "'" &
" WHERE 更新先フィールドのID(記述方法がわかりません)"
Dim cnStr As String = System.Configuration.ConfigurationManager.
ConnectionStrings("○○○○○○ConnectionString").ConnectionString
Using connection As New SqlConnection(cnStr)
Dim command As New SqlCommand(strSQL, connection)
connection.Open()
Try
command.ExecuteNonQuery()
Catch ex As Exception
lblMsg.Text = "エラー発生のため、処理を中止します! </ br>" & ex.Message
End Try
connection.Close()
End Using
End Sub
```
```FormView部分
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:testdb_tinoueConnectionString %>"
DeleteCommand="DELETE FROM [tbl_testRg] WHERE [ID] = @ID"
InsertCommand="INSERT INTO [tbl_testRg] ([ID], [result1], [result2], [result3], [result4], [result5]) VALUES (@ID, @result1, @result2, @result3, @result4, @result5)"
SelectCommand="SELECT * FROM [tbl_testRg]"
UpdateCommand="UPDATE [tbl_testRg] SET [result1] = @result1, [result2] = @result2, [result3] = @result3, [result4] = @result4, [result5] = @result5 WHERE [ID] = @ID">
<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="ID" Type="Int32" />
<asp:Parameter Name="result1" Type="String" />
/・・・質問5つ分・・・/
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="result1" Type="String" />
/・・・質問5つ分・・・/
<asp:Parameter Name="ID" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:FormView ID="FormView1" runat="server" AllowPaging="True"
DataKeyNames="ID" DataSourceID="SqlDataSource1">
<EditItemTemplate>
<table cellpadding="0" cellspacing="0" class="style3">
<tr>
<td>
ID</td>
<td>
<asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>' />
</td>
</tr>
<tr>
<td>
質問1</td>
<td>
<asp:DropDownList ID="DropDownList1" runat="server"
SelectedValue='<%# Bind("result1") %>'>
<asp:ListItem Value="はい">はい</asp:ListItem>
<asp:ListItem Value="いいえ">いいえ</asp:ListItem>
<asp:ListItem Value="未回答">未回答</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
/・・・質問5つ分・・・/
</table>
<br />
<asp:Button ID="Button1" runat="server" CommandName="Update" Text="登録" />
<asp:Button ID="Button2" runat="server" Text="キャンセル" CommandName="Cancel" />
</EditItemTemplate>
```
  • SQL Server

    755 questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • ASP.NET

    635 questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

  • Visual Studio 2010

    137 questions

    Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

2 デバッグ改善編集

taketake221

taketake221 score 11

2016/10/02 17:34  投稿

質問回答の更新プログラムでFormView-EditItemTemplateでの編集に応じてデータベースを同時更新したい。
質問タイトルがわかりにくいかもしれません。ご勘弁ください。
ASP.NET Webフォームアプリに関する質問です。
演習で、データベースを更新できるしくみを実装中です。
(実装機能については以前させていただいた[こちら](https://teratail.com/questions/47235)の質問で記載していたものと類似していますが、構成や機能が一部異なりましたので、新たに質問させていただきました。)
※OSはWindows7、.NET Framework4、Visual Stdio 2010、SQLserver2012、IE11を利用しています。
![イメージ説明](1ee95bb5129817b133c93901a55d8066.png)
更新先のテーブル構成は以上のような感じで、
result1~result5 には"はい"、"いいえ"、"未回答"の回答いずれかが、
pointには格納された回答に応じた点数(各回答が「はい」ならpoint+1、「いいえ」ならpoint-1、「未回答」なら加減なしで判定し、最終値を格納)が、dateには格納日が格納されます。
「編集」ボタンをおすと、フォームビューで表示した過去の回答(ラベルコントロールの内容)をもとに、
ドロップダウンリストで回答が可能になります。
![イメージ説明](0b094d4f4f5277ef92af1a02ad5f15bb.png)    ![イメージ説明](4cfbabfe7e9b47ce76dd461b832b99be.png)
「登録」ボタンを押すと、ドロップダウンリストで選択された回答によってポイントを計算し、日付とともに同時にデータベースに格納したいのですが、どのように記述すればよいのでしょうか。
10/02 17:00編集(タイトル変更)
```
Select Case DropDownList1.DirectCast(FormView1.FindControl("DropDownList1"), DropDownList).SelectedValue
```
の記述で、目に見えるエラーは改善されたようですが、
データベース上ではresult1~result5までの回答データが更新されるだけで、点数(point)と日付(date)は更新がなされない状況です。
「オブジェクト変数またはWithブロック変数が認定されていません」のエラーではありませんが、正常に動作するよう改善箇所・方法のご指摘をお願いいたします。
10/2 17:30編集
```ここに言語を入力
strSQL = "UPDATE tbl_testRg" &
               " SET point = " & point & "," &
               " date = " & "'" & dtToday & "'" &
               " WHERE 更新先フィールドのID(記述方法がわかりません)"
```
の部分で「& "'" & dtToday & "'" &」の記述にミスがあり、改善したところ、
テスト用にWHERE ID = 1としてID:1のデータ編集の場合のみ正常に動作することが確認できました。
元にするフィールドのIDをここでどう記述すればよいのかがわかりませんので、教えていただきたいです。
```VB
Protected Sub FormView1_ItemUpdating(sender As Object, e As System.Web.UI.WebControls.FormViewUpdateEventArgs) Handles FormView1.ItemUpdating
       Dim point As Integer
       Dim dtToday As DateTime = Date.Today
   /・・・質問5つ分(繰り返し文は不問とします)・・・/
       Select Case DropDownList1.DirectCast(FormView1.FindControl("DropDownList1"), DropDownList).SelectedValue
           Case "はい"
               point = point + 1
           Case "いいえ"
               point = point - 1
       End Select
       Dim strSQL As String
       strSQL = "UPDATE tbl_testRg" &
               " SET point = " & point & "," &
               " date = " & dtToday &
               " date = " & "'" & dtToday & "'" &
               " WHERE 更新先フィールドのID(記述方法がわかりません)"
       Dim cnStr As String = System.Configuration.ConfigurationManager.
           ConnectionStrings("○○○○○○ConnectionString").ConnectionString
       Using connection As New SqlConnection(cnStr)
           Dim command As New SqlCommand(strSQL, connection)
           connection.Open()
           Try
               command.ExecuteNonQuery()
           Catch ex As Exception
               lblMsg.Text = "エラー発生のため、処理を中止します! </ br>" & ex.Message
           End Try
           connection.Close()
       End Using
   End Sub
```
```FormView部分
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
       ConnectionString="<%$ ConnectionStrings:testdb_tinoueConnectionString %>"
       DeleteCommand="DELETE FROM [tbl_testRg] WHERE [ID] = @ID"
       InsertCommand="INSERT INTO [tbl_testRg] ([ID], [result1], [result2], [result3], [result4], [result5]) VALUES (@ID, @result1, @result2, @result3, @result4, @result5)"
       SelectCommand="SELECT * FROM [tbl_testRg]"
       UpdateCommand="UPDATE [tbl_testRg] SET [result1] = @result1, [result2] = @result2, [result3] = @result3, [result4] = @result4, [result5] = @result5 WHERE [ID] = @ID">
       <DeleteParameters>
           <asp:Parameter Name="ID" Type="Int32" />
       </DeleteParameters>
       <InsertParameters>
           <asp:Parameter Name="ID" Type="Int32" />
           <asp:Parameter Name="result1" Type="String" />
      /・・・質問5つ分・・・/
       </InsertParameters>
       <UpdateParameters>
           <asp:Parameter Name="result1" Type="String" />
      /・・・質問5つ分・・・/
           <asp:Parameter Name="ID" Type="Int32" />
       </UpdateParameters>
   </asp:SqlDataSource>
   <asp:FormView ID="FormView1" runat="server" AllowPaging="True"
       DataKeyNames="ID" DataSourceID="SqlDataSource1">
       <EditItemTemplate>
           <table cellpadding="0" cellspacing="0" class="style3">
               <tr>
                   <td>
                       ID</td>
                   <td>
                       <asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>' />
                   </td>
               </tr>
               <tr>
                   <td>
                       質問1</td>
                   <td>
                       <asp:DropDownList ID="DropDownList1" runat="server"
                           SelectedValue='<%# Bind("result1") %>'>
                           <asp:ListItem Value="はい">はい</asp:ListItem>
                           <asp:ListItem Value="いいえ">いいえ</asp:ListItem>
                           <asp:ListItem Value="未回答">未回答</asp:ListItem>
                       </asp:DropDownList>
                   </td>
               </tr>
        /・・・質問5つ分・・・/
           </table>
           <br />
           <asp:Button ID="Button1" runat="server" CommandName="Update" Text="登録" />
           <asp:Button ID="Button2" runat="server" Text="キャンセル" CommandName="Cancel" />
           
       </EditItemTemplate>
```
  • SQL Server

    755 questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • ASP.NET

    635 questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

  • Visual Studio 2010

    137 questions

    Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

1 タイトル変更、改善箇所追記

taketake221

taketake221 score 11

2016/10/02 17:11  投稿

質問回答の更新プログラムで「オブジェクト変数またはWithブロック変数が認定されていません」のエラーが出ないよう改善したい。
質問回答の更新プログラムでFormView-EditItemTemplateでの編集に応じてデータベースを同時更新したい。
質問タイトルがわかりにくいかもしれません。ご勘弁ください。  
 
ASP.NET Webフォームアプリに関する質問です。
演習で、データベースを更新できるしくみを実装中です。
(実装機能については以前させていただいた[こちら](https://teratail.com/questions/47235)の質問で記載していたものと類似していますが、構成や機能が一部異なりましたので、新たに質問させていただきました。)
※OSはWindows7、.NET Framework4、Visual Stdio 2010、SQLserver2012、IE11を利用しています。
![イメージ説明](1ee95bb5129817b133c93901a55d8066.png)
更新先のテーブル構成は以上のような感じで、
result1~result5 には"はい"、"いいえ"、"未回答"の回答いずれかが、
pointには格納された回答に応じた点数(「はい」なら+1、「いいえ」なら-1、「未回答」なら加減なし)が、dateには格納日が格納されます。
pointには格納された回答に応じた点数(各回答が「はい」ならpoint+1、「いいえ」ならpoint-1、「未回答」なら加減なしで判定し、最終値を格納)が、dateには格納日が格納されます。
「編集」ボタンをおすと、フォームビューで表示した過去の回答(ラベルコントロールの内容)をもとに、
ドロップダウンリストで回答が可能になります。
![イメージ説明](0b094d4f4f5277ef92af1a02ad5f15bb.png)    ![イメージ説明](4cfbabfe7e9b47ce76dd461b832b99be.png)
「登録」ボタンを押すと、ドロップダウンリストで選択された回答によってポイントを計算し、日付とともに同時にデータベースに格納したいのですが、どのように記述すればよいのでしょうか。
現在生じているエラーは、
10/02 17:00編集(タイトル変更)
```
Select Case DropDownList1.DirectCast(FormView1.FindControl("DropDownList1"), DropDownList).SelectedValue
```
の記述で、目に見えるエラーは改善されたようですが、
データベース上ではresult1~result5までの回答データが更新されるだけで、点数(point)と日付(date)は更新がなされない状況です。
・コード上の「DropDownList○.SelectedValue」の部分で「DropDownList○は宣言されていません。アクセスできない保護レベルになっています」と表示されること。
・上記にしたがって、「Private Property DropDownList1 As Object」の一文を付け足して実行すると、
「DropDownList1.SelectedValue」の部分で、以下のようなメッセージが表示される。
![イメージ説明](8ad54a458e663169074d95d5770809f3.png)
「オブジェクト変数またはWithブロック変数が認定されていません」のエラーではありませんが、正常に動作するよう改善箇所・方法のご指摘をお願いいたします。
```VB
Protected Sub FormView1_ItemUpdating(sender As Object, e As System.Web.UI.WebControls.FormViewUpdateEventArgs) Handles FormView1.ItemUpdating
       Dim point As Integer
       Dim dtToday As DateTime = Date.Today
   /・・・質問5つ分(繰り返し文は不問とします)・・・/
       Select Case DropDownList1.SelectedValue
       Select Case DropDownList1.DirectCast(FormView1.FindControl("DropDownList1"), DropDownList).SelectedValue
           Case "はい"
               point = point + 1
           Case "いいえ"
               point = point - 1
       End Select
       Dim strSQL As String
       strSQL = "UPDATE tbl_testRg" &
               " SET point = " & point & "," &
               " date = " & dtToday &
               " WHERE 更新先フィールドのID(記述方法がわかりません)"
       Dim cnStr As String = System.Configuration.ConfigurationManager.
           ConnectionStrings("○○○○○○ConnectionString").ConnectionString
       Using connection As New SqlConnection(cnStr)
           Dim command As New SqlCommand(strSQL, connection)
           connection.Open()
           Try
               command.ExecuteNonQuery()
           Catch ex As Exception
               lblMsg.Text = "エラー発生のため、処理を中止します! </ br>" & ex.Message
           End Try
           connection.Close()
       End Using
   End Sub
```
```FormView部分
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
       ConnectionString="<%$ ConnectionStrings:testdb_tinoueConnectionString %>"
       DeleteCommand="DELETE FROM [tbl_testRg] WHERE [ID] = @ID"
       InsertCommand="INSERT INTO [tbl_testRg] ([ID], [result1], [result2], [result3], [result4], [result5]) VALUES (@ID, @result1, @result2, @result3, @result4, @result5)"
       SelectCommand="SELECT * FROM [tbl_testRg]"
       UpdateCommand="UPDATE [tbl_testRg] SET [result1] = @result1, [result2] = @result2, [result3] = @result3, [result4] = @result4, [result5] = @result5 WHERE [ID] = @ID">
       <DeleteParameters>
           <asp:Parameter Name="ID" Type="Int32" />
       </DeleteParameters>
       <InsertParameters>
           <asp:Parameter Name="ID" Type="Int32" />
           <asp:Parameter Name="result1" Type="String" />
      /・・・質問5つ分・・・/
       </InsertParameters>
       <UpdateParameters>
           <asp:Parameter Name="result1" Type="String" />
      /・・・質問5つ分・・・/
           <asp:Parameter Name="ID" Type="Int32" />
       </UpdateParameters>
   </asp:SqlDataSource>
   <asp:FormView ID="FormView1" runat="server" AllowPaging="True"
       DataKeyNames="ID" DataSourceID="SqlDataSource1">
       <EditItemTemplate>
           <table cellpadding="0" cellspacing="0" class="style3">
               <tr>
                   <td>
                       ID</td>
                   <td>
                       <asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>' />
                   </td>
               </tr>
               <tr>
                   <td>
                       質問1</td>
                   <td>
                       <asp:DropDownList ID="DropDownList1" runat="server"
                           SelectedValue='<%# Bind("result1") %>'>
                           <asp:ListItem Value="はい">はい</asp:ListItem>
                           <asp:ListItem Value="いいえ">いいえ</asp:ListItem>
                           <asp:ListItem Value="未回答">未回答</asp:ListItem>
                       </asp:DropDownList>
                   </td>
               </tr>
        /・・・質問5つ分・・・/
           </table>
           <br />
           <asp:Button ID="Button1" runat="server" CommandName="Update" Text="登録" />
           <asp:Button ID="Button2" runat="server" Text="キャンセル" CommandName="Cancel" />
           
       </EditItemTemplate>
```
  • SQL Server

    755 questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • ASP.NET

    635 questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

  • Visual Studio 2010

    137 questions

    Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る