ASP.NET C# SQLパラメータの設定方法は?

このQ&Aのポイント
  • グリッドビューの編集、更新キャンセル機能でのUpdateCommandにSQL文を設定する方法がわからない。
  • SqlConnectionとSqlCommandを使用してSQLパラメータを設定したいが、UpdateCommandに対するパラメータの設定方法が不明。
  • パラメータを使用してUpdateCommandにSQL文を設定したいが、具体的な設定方法が分からない。
回答を見る
  • ベストアンサー

ASP.NET C# SQLパラメータ

いつもお世話になっております。 グリッドビューから編集、更新キャンセルの機能を使っているところなのですが、更新ボタンのイベント(RowUpdating)からだとUpdateCommandに直接SQL文を入れないとうまく行きません。 UpdateCommand = "update .....";のようにです。 SqlConnection cn = new SqlConnection(接続文字列); SqlCommand cmd = new SqlCommand(SQL文, cn); SqlParameter sp1 = cmd.Parameters.Add("@パラメータ", SqlDbType.Int); SqlParameter sp2 = cmd.Parameters.Add("@パラメータ2", SqlDbType.VarChar); sp1.Value = 変数 sp2.Value = 変数 cn.Open(); cmd.ExecuteNonQuery(); cn.Close(); のようにパラメータを使いたいのですが、UpdateCommandに対するパラメータの設定のやり方がわかりません、教えてください!!

  • arnk
  • お礼率49% (32/65)

質問者が選んだベストアンサー

  • ベストアンサー
  • Xaval
  • ベストアンサー率58% (61/105)
回答No.2

UpdateParameters["@param"].DefaultValue の「@」は要りません。SQL文の中でのみ必要です。 UpdateCommandのSQL文は変更しないでください。 初期状態のままで。 それを設定すると、またSqlCommandParameterのコレクションも入れなおす必要が出るかもしれないので(詳細不明)。 また、UpdateParameters["@param"].DefaultValueの値に合わせて、 e.Keys, e.NewValuesなどのSqlのパラメータが詰め込まれます。 つまり、e.Keysなどから UpdateParameters["@param"].DefaultValue につっこんでも順序が逆です。 (ような気がする。ただし、GridViewのRowUpdatingならセーフ?) ※ちょっといま開発環境がないので、確認できません。ごめんなさい。 SqlDataSourceコントロールを配置したら、そこに登録されているものの変更は、VisualStudio上のデザイン時のみ設定してください。 プログラムからは、UpdateParametersなどだけを変更してください。 1)GridViewを配置 2)SqlDataSourceを配置(GridViewのデータソースに指定) 3)SqlDataSourceにSelect,UpdateなどのSQL文(@パラメータつき)を登録 4)実行。必要ならUpdatingイベントなどで、UpdateParameters["Param1"].DefaultValueなどを設定。 もしくは、SqlDataSource.Updatingイベントの e.NewValues["Param1"] = (int)x などの入力でも可能 それと今後のため。。 基本的に、.NETのフレームワークは層が厚いので、コードをガリガリ書く20世紀型JAVA的開発はしません。 ひたすらイベントの実行順序やそのアーキテクチャを学習してくださいね。 この機会にほかのイベントやその引数、実行順序などを調べてみるといいと思います。

arnk
質問者

お礼

ご丁寧に教えていただき本当に助かりました! ありがとうございました、感謝します!

その他の回答 (1)

  • Xaval
  • ベストアンサー率58% (61/105)
回答No.1

SlqDataSourceのUpdatingイベントではだめですか? あのへんならありそうですが。 また、 SqlDataSourceの UpdateParameters["Param1"].DefaultValue = "xxx"; でも可です。

arnk
質問者

お礼

SelectDataSource.UpdateParameters["@param1"].DefaultValue = e.NewValues[0].ToString(); SelectDataSource.UpdateParameters["@param2"].DefaultValue = e.NewValues[1].ToString(); SelectDataSource.UpdateParameters["@param3"].DefaultValue = e.Keys[0].ToString(); SelectDataSource.UpdateParameters["@param4"].DefaultValue = e.Keys[1].ToString(); string strsql = "update mst_attribute_selection set selection = @param1, seq = @param2 where attribute_no = @param3 and selection = @param4"; SelectDataSource.UpdateCommand = strsql; でやってみたんですがだめでした。。 ど素人なものですいません。。 やり方が間違っているんでしょうか。。

関連するQ&A

  • VB DB更新時にパラメーターへ値のセット

    データベースの更新についてご指導下さい。 VB2010からSQLサーバーのデータベースに接続しております。 dataAdapter.Updateによりデータベースを更新する際の パラメーターへ値をセットする方法を教えて下さい。 テーブル名Test Code Name ------------ A   Suzuki 希望する処理 テキストボックスに入力された名前に変更 例) Suzuki → Yamada ○フォームの変数として定義 Dim dataAdapter As New SqlDataAdapter Dim dataSet As New DataSet ○FormLoad時にSelectCommandとUpdateCommandを設定 Dim SQL As String = "" Dim command As SqlCommand Dim connection As SqlConnection = New SqlConnection(~) SQL = "SELECT * FROM Test WHERE Code = @code " command = New SqlCommand(SQL, connection) dataAdapter.SelectCommand = command dataAdapter.SelectCommand.Parameters.Add("@code", SqlDbType.Char) SQL = "UPDATE Test SET Name = @name WHERE Code = @code" command = New SqlCommand(SQL, connection) dataAdapter.UpdateCommand = command dataAdapter.UpdateCommand.Parameters.Add("@code", SqlDbType.Char) dataAdapter.UpdateCommand.Parameters.Add("@name", SqlDbType.Text, 50) ○データ表示時にはこれで表示されました。 dataAdapter.SelectCommand.Parameters.Item("@code").Value = ComboBoxCode.text dataAdapter.Fill(dataSet) ○このSelectCommandを参考にこのように書いて見たのですが更新されません。 dataAdapter.UpdateCommand.Parameters.Item("@code").Value = ComboBoxCode.Text dataAdapter.UpdateCommand.Parameters.Item("@name").Value = TextBoxName.Text dataAdapter.Update(dataSet) どのようにしたら実行時にパラメーター化したところへデータをセットできるのでしょうか? データセットに値が入っていないのでは?と予想したのですが…。

  • Insertできません

    どうしてもInsertできませんどこが間違っているのか教えてください。 Dim cn As New SqlConnection("workstation id=""ユーザー名?"";packet size=4096;user id=test;data source=server名;per" & _ "sist security info=True;initial catalog=テーブル名;Password=パスワード") Dim cmd As New SqlCommand("カラム1", cn) cmd.CommandType = CommandType.StoredProcedure 'cnst.CommandText = "INSERT INTO テーブル名(カラム1, カラム2, カラム3,カラム4) " & _ '"VALUES (@カラム1, @カラム2, @カラム3,@カラム4())" Dim p1 As SqlParameter = cmd.Parameters.Add("@カラム1", SqlDbType.VarChar, 20) p1.Value = TextBox1.Text Dim p2 As SqlParameter = cmd.Parameters.Add("@カラム2", SqlDbType.VarChar, 20) p2.Value = TextBox2.Text Dim p3 As SqlParameter = cmd.Parameters.Add("@カラム3", SqlDbType.VarChar, 20) p3.Value = Dropdownlist1.DataTextField Dim p4 As SqlParameter = cmd.Parameters.Add("@カラム4", SqlDbType.VarChar, 20) p4.Value = TextBox3.Text cn.Open() cmd.ExecuteNonQuery() cn.Close() SqlDataAdapter2.Fill(DataSet21) DataGrid1.DataBind() End Sub __________________________________________ __________________________________________

  • Visual Studio 2005 Sql Server 2005 C#

    先輩方 こんばんは カネゴンです。 下記内容で困っています。 SqlConnection がオープンできません。 「SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因 sql server」のエラーと 「**」はログインできませんでしたの表示がされ、かれこれ3日悩んでおります。 宜しくお願いします。 SqlConnection cn = new SqlConnection(@" Server = local ; Trusted_Connection = Yes ; Database = user_master ; uid = *** ; pwd = *** ; "); SqlCommand cmd = new SqlCommand("login_check", cn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter p1 = new SqlParameter("@p1",             System.Data.SqlDbType.VarChar, 16); p1.Value = TextBox1.Text; SqlParameter p2 = new SqlParameter("@p2",             System.Data.SqlDbType.VarChar, 16); p2.Value = TextBox2.Text; cn.Open();

  • C#のSQL言語について教えてください。

    windowsフォーム上にデータベースのテーブルを載せて、 書き込むボタンを作り、その書き込み内容を書き込み直後にフォーム上のデータベースのテーブルに反映させたいと思っているのですが反映されません。コードが間違っていますでしょうか? これがソースです。 SqlConnection cn; SqlCommand cmd; cn = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=E:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\Database1.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True"); cmd = new SqlCommand("Select * From Product", cn); cn.Open(); //Table1の学籍番号00000001の行の授業開始の列に1と入力する。 cmd = new SqlCommand("UPDATE Table1 " + "SET 授業開始='1' WHERE 学籍番号=" + response.Comm[ix].TagData, cn); cmd.ExecuteNonQuery(); SqlTransaction st; st = cn.BeginTransaction("Table1"); cmd.Transaction = st; st.Commit(); cn.Close(); コミットはこれでいいのでしょうか? this.table1TableAdapter.Fill(this.database1DataSet.Table1); これを入れてもテーブルが更新されませんでした。

  • データベースから情報の取得・更新・削除 visual studio2005 sqlserver2005 c# (3)

    こんにちは、カネゴンです。 標記の件で再度質問させていただきます。 データグリッドへの新レコードの追加です。 下記ソースで、まず「daをfillできません」となります。 パラメータあたりがおかしいのはわかっていますが、どのように直したらいいのやらわかりません。 次にこのページは、登録画面をnewして、別画面で表示しているのですが もちろんデータグリッドは別ページにあるため、「datagird1がありません」となります。 皆さんのお力をおかしください(__) 以上よろしくお願いします。 string StrConn = @" server = ***\SQL2005 ; " + " database =ser_master ; " + " uid = sa ; " + " pwd = *** ; "; SqlConnection cnc = new SqlConnection(StrConn); cnc.Open(); SqlCommand cmd = new SqlCommand("INSERT INTO [user_master]" + " ( UserID ,UserName , Password , Age , Salary , Sex ) VALUES " + " ( @userid , @username, @password, @age, @salary, @sex ", cnc); cmd.Parameters.AddWithValue("@userid", SqlDbType.VarChar); cmd.Parameters.AddWithValue("@username", SqlDbType.VarChar); cmd.Parameters.AddWithValue("@password", SqlDbType.VarChar); cmd.Parameters.AddWithValue("@age", SqlDbType.Int); cmd.Parameters.AddWithValue("@salary", SqlDbType.Int); cmd.Parameters.AddWithValue("@sex", SqlDbType.VarChar); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds, "user_master"); cnc.Close(); dataGridView1.DataSource = ds.Tables["user_master"];  

  • VB.Net SqlCommand 共通に

    お世話になります。 VB.Net 駆け出しの者です。 SqlCommand を使いストアドプロシジャーを実行して戻り値を DateSet にするような関数はプログラムを作っていくと、かなり多数になるようになりました。接続文字列だったり、いろいろ同じような記述が続いているなと思っておりました。 そこで、以下のような関数を作り、この部分を使いまわせないものかと思っております。 ストアドプロシジャーの名前や、そのほか必要な部分の文字はすべて変数にして、なんとか使えないのかなと思っているのですが、問題なのは、パラメータの部分でうまくいかないのです。 パラメータの部分だけ別関数にして、なんとかねじこめないかなと思っているのですが・・・ そもそもこういうやり方が正しいのかどうかもわからないのですが、その辺りも含めご教授いただければ幸いでございます。 何卒よろしくお願いいたします。 Public Function CommonDataSet(ByVal NameStored As String, ByVal CMDPara As SqlCommand, ByVal BasicTableName As String, ByVal ErrStr As String, ByVal ErrStrCaption As String) As DataSet     Dim SQLCon As SqlConnection = New SqlConnection(CMO.GetConnectStrings())     Try       CMDPara = New SqlCommand(NameStored, SQLCon)       CMDPara.CommandType = CommandType.StoredProcedure       SQLCon.Open()       Dim custDA As SqlDataAdapter = New SqlDataAdapter       Dim custDS As DataSet = New DataSet       ’この部分で下記の関数でパラメータを設定したいのですが、うまくいきません       custDA.SelectCommand = CMDPara       custDA.Fill(custDS, BasicTableName)       CommonDataSet = custDS     Catch ex As Exception       Err.Raise(Err.Number)       MessageBox.Show(ErrStr, ErrStrCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning)       CommonDataSet = Nothing     End Try     If SQLCon.State <> ConnectionState.Closed Then       SQLCon.Close()       SQLCon.Dispose()     End If End Function パラメータを設定する関数 上の関数の引数として設定したいのです  ByVal CMDPara As SqlCommand の部分のパラメータとして Private Function CommonPara(CMD As SqlCommand) As SqlCommand     CMD.Parameters.Clear()     CMD.Parameters.Add(New SqlParameter(パラメータ1の記述)     CMD.Parameters.Add(New SqlParameter(パラメータ2の記述)     CMD.Parameters.Add(New SqlParameter(パラメータ3の記述)     CommonPara = CMD End Function

  • ASP C#

    単純にデータベースから取得した物をフォームのTEXT_BOXに表示させたいのですがやり方がわかりません。 グリッドビューに結果をそのままバインドするのはわかるのですが。。。 select 品名 from 商品テーブル where ID = 3 など、結果が必ず1件のものです SqlConnection cn = new SqlConnection(@"Server=*****;Database=*****;User ID=***; Password=***;"); SqlCommand cmd = new SqlCommand("select title from mst_table where id = 1", cn); cn.Open(); このあと text_box.text = 結果; としたいんです。。。

  • SQLとC#connectについて

    独学で勉強しているのですがさっぱり分かりません...。 C# visual studio へ SQL server情報を読み込みたいのですが...Button1を押したら、sql に作成してある(ingredientという) データをrichtextbox へ送りたいです。 今のところ、SQLにcommandを送り、開き、リーダーで呼びました。 SqlConnection sc = new SqlConnection(@"........."); SqlCommand cmd; cmd = new SqlCommand ("Select * from ingredients", sc); sc.Open(); SqlDataReader reader = cmd.ExecuteReader(); その後作っておいたクラスでリストを作りストアしました。ingredientにはidとnameだけです。 List<Ingredient> ingredients = new List<Ingredient>(); while (reader.Read()) {  string testID = reader["id"].ToString(); string ingName = reader["name"].ToString(); Ingredient oneIng = new Ingredient(Convert.ToInt32(testID), ingName); ingredients.Add(oneIng);} 今リストの中に情報が入っているということは分ります。でも、これをrichtextboxにどう整理して入れるのかは分りません。教えて下さい!!!

  • <ASP.NET+C#+MSDE> JPEG画像の表示ができません。

    こんばんわ。 ASP.NET+C#+MSDEで開発を行っております。 MSDEのあるテーブルにImage型の項目を用意し、Access2000でリンクを張って、JPEG形式のファイルを登録しました。 ASP.NETの方のSQL文を書いて、画像を取得して表示させようとするのですが、「×」マークしか表示されません。IIS等の設定が悪いのでしょうか? コードはこんな感じです。 ================================================ SqlConnection sqlconn = new SqlConnection(ConfigurationSettings.AppSettings["DSNSTRING"]); SqlCommand sqlcmd = new SqlCommand("SELECT 画像 FROM 画像 WHERE 車番=@id",sqlconn); //パラメータの設定 sqlcmd.Parameters.Add("@id",SqlDbType.Int).Value = productid; //実行する SqlDataReader sqlreader; sqlconn.Open(); sqlreader = sqlcmd.ExecuteReader(); if(sqlreader.Read()) { byte [] b = (byte[])sqlreader.GetValue(0); Response.ContentType = "image/pjpeg"; Response.BinaryWrite(b); } else { Response.StatusCode = (int)HttpStatusCode.NotFound; Response.End(); return; } // 出力を閉じて終了 Response.End(); ================================================ どなたかアドバイスください。お願いします。

  • <>&などを保存する方法をおしえてください。

    <>&などを保存する方法をおしえてください。 NameTextBox CommentTextBox 保存ボタン があり保存ボタンを押すと 下記コードが実行されるようにしました。 これで、保存はできるようになったのですが <>&などを使用するとエラーとなってしまします。 <>&を使用するにはどのようにしたらいいのでしょうか? 教えてください。 Dim strSQL As String = "INSERT INTO tableA (Name,Comment) VALUES (@Name,@Comment)" Using con As New SqlConnection(conStr) Dim command As New SqlCommand(strSQL, con) con.Open() Using cmd1 As SqlDataReader = con.CreateCommand() cmd1.CommandType = CommandType.Text Try with cmd1 .Parameters.Add("@Name", SqlDbType.NVarChar) .Parameters.Add("@Comment", SqlDbType.NVarChar) .Parameters("@Name").Value = NameTextBox .Parameters("@Comment").Value = CommentTextBox End With cmd1.CommandText = strSQL cmd1.ExecuteNonQuery() Catch er As Exception Finally con.Close() Catch ex As Exception Finally con.Close() End Try End Using End Using

専門家に質問してみよう