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

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

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

Re[2]: SQLパラメータによるデータ挿入


(過去ログ 19 を表示中)

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

■7658 / inTopicNo.1)  SQLパラメータによるデータ挿入
  
□投稿者/ 松田 (4回)-(2007/09/12(Wed) 18:58:44)

分類:[ASP.NET (VB)] 

質問が下手なので、やりたいことをまとめてみました。

テキストボックスを2つ用意して
「txt_company」には会社名を「txt_Name」には氏名を入力し
ラジオボタンリスト「rdo_Type」から選択した後、
「Button1」ボタンをクリックすると3つのデータを「ユーザ」テーブルへ挿入。

という風にしたいのですが、うまく行きません。エラーは出ませんが何も挿入されません。
これはどういう意味でしょうか?
もしかしたら元々の構成を勘違いしているのかもしれないのでコードを記述してみました。

何方かご指南お願い致します。


・イベントハンドラ

Protected Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
 SqlDataSource1.Insert()
End Sub

Protected Sub SqlDataSource1_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs)
 e.Command.Parameters("@company").Value = txt_company.Text
 e.Command.Parameters("@name").Value = txt_Name.Text
 e.Command.Parameters("@type").Value = rdo_Type.SelectedValue
End Sub

Protected Sub SqlDataSource1_Inserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs)
 Label1.Text = e.AffectedRows + "件処理されました"
End Sub


・SqlDataSource

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
 ConnectionString="<%$ ConnectionStrings:MyNorthwind %>" 
 InsertCommand="INSERT INTO ユーザ (会社名, 氏名, タイプ) SELECT(@company, @name, @type)"> 

 <InsertParameters>
  <asp:formparameter Name="company" ConvertEmptyStringToNull="true"/>
  <asp:formparameter Name="name" />
  <asp:formparameter Name="type" />
 </InsertParameters>

</asp:SqlDataSource>


引用返信 編集キー/
■7678 / inTopicNo.2)  Re[1]: SQLパラメータによるデータ挿入
□投稿者/ 七曜 (13回)-(2007/09/13(Thu) 00:44:36)
随所に間違いがちらほら…デバック実行すればわかりそうな予感がしますが・・・
検証環境はVS2005(VB.NET)です。

[コードビハインド側]
    Protected Sub SqlDataSource1_Inserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles SqlDataSource1.Inserted
        Label1.Text = e.AffectedRows.ToString() + "件処理されました"
    End Sub

    Protected Sub SqlDataSource1_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles SqlDataSource1.Inserting
        e.Command.Parameters("@company").Value = "xxx"
        e.Command.Parameters("@name").Value = "yyy"
        e.Command.Parameters("@type").Value = "zzz"
    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        SqlDataSource1.Insert()
    End Sub

[aspx]
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyNorthWindConnectionString %>"
            InsertCommand="INSERT INTO ユーザ(会社名, 氏名, タイプ) VALUES (@company, @name, @type)"
            SelectCommand="SELECT ユーザ.* FROM ユーザ">
            <InsertParameters>
                <asp:Parameter Name="company" />
                <asp:Parameter Name="name" />
                <asp:Parameter Name="type" />
            </InsertParameters>
        </asp:SqlDataSource>
        <asp:Button ID="Button1" runat="server" Text="Button" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

まず、InsertCommandが間違っているような。
つぎに、e.AffectedRowsはToString()しないと文字列連結にならないような・・・。

パラメータの設定は面倒なのでハードコードして検証しました。あしからず。

引用返信 編集キー/
■7679 / inTopicNo.3)  Re[2]: SQLパラメータによるデータ挿入
□投稿者/ 七曜 (14回)-(2007/09/13(Thu) 00:58:53)
ちなみに1件づつInsertするだけならSqlDataSourceを使わなくても

    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
        Using connection As New SqlConnection(WebConfigurationManager.ConnectionStrings("MyNorthWindConnectionString").ConnectionString)
            connection.Open()
            Dim command As New SqlCommand("INSERT INTO ユーザ(会社名, 氏名, タイプ) VALUES (@company, @name, @type)", connection)
            command.Parameters.AddWithValue("@company", "xxx1")
            command.Parameters.AddWithValue("@name", "yyy1")
            command.Parameters.AddWithValue("@type", "zzz1")
            Dim result As Integer = command.ExecuteNonQuery()
            Label1.Text = result.ToString() + "件処理されました"
            connection.Close()
        End Using
    End Sub

こんな感じで同様の結果は得られるかと思われます。

引用返信 編集キー/
■7718 / inTopicNo.4)  Re[2]: SQLパラメータによるデータ挿入
□投稿者/ 松田 (5回)-(2007/09/13(Thu) 16:03:01)
No7678 (七曜 さん) に返信

この方法で解決致しました。

e.AffectedRowsはToString()しないといけなかったんですね。

InsertCommandの細かな間違いまで指摘していただき、
ご丁寧にありがとうございました。


解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -