DataAdapter使用時のパラメータ設定について

このQ&Aのポイント
  • DataAdapter使用時のパラメータ設定方法としてSQL文に@hogeのようにパラメータを指定し、DataAdapterのFillを実行するとエラーが発生する問題があります。
  • エラーメッセージとしては、スカラ変数@hogeを宣言してくださいと表示されます。
  • 解決策としては、Command.Parameters.Addメソッドでパラメータを追加し、その後にCommand.Parameters.Itemメソッドでパラメータの値を設定する必要があります。
回答を見る
  • ベストアンサー

DataAdapter使用時のパラメータ設定について

SQL文に@hogeのようにパラメータを指定して DataAdapterのFillを実行させようとしているのですが エラーでスカラ変数@hogeを宣言してくださいと出ます。 何かご存知の方が居ましたらご教授お願いいたします ソースは簡単に書くと '■SELECT文の設定 Command.CommandText = "SELECT 社員名 FROM 社員マスタ WHERE 社員番号 = @hoge" Command.Parameters.Add("@hoge", Data.SqlDbType.Int) Command.Parameters.Item("@hoge").Value = 10 '■DataAdapterのインスタンス生成 DataAdapter = New SqlClient.SqlDataAdapter(Command.CommandText, Connection) '■SQL実行 Adapter.Fill(dsSELECT)

noname#17894
noname#17894

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

  • ベストアンサー
回答No.1

>■SELECT文の設定 でSqlCommandに ・SELECTのSQL文の設定 ・コマンドパラメータの設定 >■DataAdapterのインスタンス生成 ・SQL文とコネクションだけわたっている ・パラメータが渡っていない '■SQL実行 ・そのまま実行している という状況なので、スカラ変数の情報を未設定まま発行しているようです。 '■SELECT文の設定 Command.CommandText = "SELECT 社員名 FROM 社員マスタ WHERE 社員番号 = @hoge" Command.Parameters.Add("@hoge", SqlDbType.Int) Command.Parameters.Item("@hoge").Value = 10 Command.Connection = New SqlConnection(Connection) '■DataAdapterのインスタンス生成 DataAdapter = New SqlDataAdapter() DataAdapter.SelectCommand = Command '■SQL実行 DataAdapter.Fill(dsSELECT) というようにしてみたら、大丈夫だと思います。

noname#17894
質問者

お礼

回答ありがとうございます 確かにコネクションとSQL文しか渡してないのに実行してましたね・・・ 回答にソースコードまで書いていただき大変参考になりました。

関連する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) どのようにしたら実行時にパラメーター化したところへデータをセットできるのでしょうか? データセットに値が入っていないのでは?と予想したのですが…。

  • データベースから情報の取得・更新・削除 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"];  

  • 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に対するパラメータの設定のやり方がわかりません、教えてください!!

  • SQL文の内容に関わらず、使うメソッドを固定したい

    C# 2010 version 4.0を使用しています。 System.Data.SQLiteにおいて、SQL文を実行するときに 例えば insert文なら command.CommandText = "INSERT INTO tbl1 (title) VALUES ('title1)"; command.ExecuteNonQuery(); select文なら command.CommandText = "SELECT * FROM tbl1"; using (SQLiteDataReader reader = command.ExecuteReader()){ } とSQL文の内容によってそれぞれ別のメソッドを使うと思うのですが、 内容を気にせずとりあえずSQLを発行する処理だけは同じメソッドで 記述することはできないのでしょうか?またはそのようなメソッドなどは用意されてはいないのでしょうか?

  • SQL パラメーターの表示について

    度々お世話になります Windows7、VB2010(Windowsフォーム)、SQL Server で開発し、XPと7で画面を動かします 今、SQLでパラメータを使っており、エラー処理で困っております SQLのパラメータの内容が表示されない(SQLが、「~~~~ WHERE KEN_ID = @KEN_ID」そのままになり、「~~~~  KEN_ID = '01'」等にならない) です Dim sql As New StringBuilder Dim ds As DataSet Using con As New Common.DB(Common.Values.ConnectionString) Try sql.Append("SELECT KEN_NAM FROM KEN_M") sql.Append(" WHERE") sql.Append(" KEN_ID = @KEN_ID") con.ClearParameter() con.AddParameter("KEN_ID", strKenName) ds = con.GetDataSet(sql.ToString) Return dt Catch ex As Exception 'Throw New Exception(ex.ToString & vbCrLf & sql.ToString) MsgBox("県取得処理" & vbcrlf & Sql.Tostring) End Try End Using ---- ↓ 別プロジェクト ↓ --- Public Function GetDataSet(ByVal sql As String) As DataSet      Command.CommandText = sql      If String.IsNullOrEmpty(Command.CommandText) Then     Throw New Exception("SQLが指定されていません") End If Dim adapter As New SqlDataAdapter(Command) Try adapter.Fill(ds) Return ds Catch ex As Exception Throw New Exception("DataSetオブジェクトの取得に失敗しました。", ex) End Try と書いております よろしくお願いします

  • ACCESSでパススルークエリにパラメータを使用したい

    毎度お世話になっております。 WindowsXP、Access2003、SQLServer2000を使用しております。 ADOでSQLServerからデータを抽出したいのですが、 パラメータを使用したいと考えております。  SELECT CODE FROM テーブル1  WHERE CODE = ? とし  adoCmd.CommandTimeout = 0  With adoCmd   .CommandText = strSQL   .CommandType = adCmdUnknown   .Prepared = False   .Parameters.Refresh  End With  adoCmd.Parameters(0).Value = InputBox(Trim(strBuf))  Set adoSet = adoCmd.Execute とすることで動作しました。 しかしSQL文を下記に変更したところエラーになりました。  SELECT t1.CODE FROM  (SELECT CODE FROM テーブル1 WHERE CODE = ? ) as t1  LEFT JOIN  (SELECT CODE FROM テーブル2 WHERE CODE = ? ) as t2  ON t1.CODE = t2.CODE のようにすると、  .Parameters.Refresh の部分で 実行時エラー -21474672595(80004005) 構文エラーまたはアクセス違反です。 となってしまいました。 2つの?の内、片方を定数に、片方を?にしてもエラーになりました。 ?を両方とも定数にすれば実行できました。 JOIN句がある場合に?を使ってはいけないのでしょうか。 何がエラーの原因かわからない状態です。 ご教授お願いいたします。

  • Access パラメータクエリーをVBAで実行

    初めての質問になります、宜しくお願いします。 Access2007でのPG開発を行っています。 Insertのパラメータクエリーを作成してました(以下Q_Inst)。 VBA側でパラメータをセットして実行するとエラーが出てしまいます。 実行時エラー3265 要求された名前、または・・・ dbCmd.CommandText = "Q_Inst" dbCmd.CommandType = adCmdStoredProc dbCmd.Parameters.Refresh dbCmd.Parameters("[ID]") = 1 ' ←ここでエラー dbCmd.Parameters("[Name]") = TanakaTarou dbCmd.Parameters("[Birth]") = "1980/12/01" ADODB.Command をあまり使わないので勝手がいまいち分かりません。 SELECT、INSERT、UPDATEは今までdbCon.Execute(strSQL)でstrSQLの中にべた書きしてました。 エラーの対処方法をご教授お願い致しますm( _ _ )m

  • C#、ADO.Netでのパラメータの指定方法

    C#とSQLServerでアプリケーションを作っているのですが、以下の点で困っています。 テーブルA(以下T_A)から開始日と終了日が指定した期間のデータを抜き出そうとしています。 そこで、データアダプターをツールボックスから配置し、その中に以下のSQLを設定しています。 フィールド名をf1、f2、f3、f4とします。日付はf4に入っています。 Select f1,f2,f3 From T_A Where ( f4 BETWEEN @SD AND @ED) そして、プログラムのコード上から、@SDと@EDにデータを入れたいのですが、 その部分で行き詰っています。 sqlDataAdapter1.sqlSelectCommand2.Parameters["@SD"].value = "2005/01/01"; sqlDataAdapter1.sqlSelectCommand2.Parameters["@ED"].value = "2005/01/31"; というようなコードを記述しますと、ビルドエラーとして、 System.Data.sqlClient.SqlDataAdapterにsqlSelectCommand1の定義がありません 静的でないフィールド、メソッド、またはプロパティ'プロジェクト名.Form1.sqlDataAdapter'で、 オブジェクト参照が必要です。 と出ます。 public class Form1には、それぞれの記述が確認できますので、更に謎なのです。 ちなみにデータセットのプレビューにて、それぞれの変数を指定してやると、取得結果は正しく抽出できます。 どなたか、何かお気づきの点はないでしょうか? アドバイスをよろしくお願いいたします。

  • SQLのデータの一部分を切り取って表示するには?

    visual basicでSQLのデータを表示する際に、そのデータの左二文字だけ切り取ってdatagridviewに表示したいのですが、やり方がわかりません。 単にselect文でdatagridviewに表示するのはできたのですが。 切り取りには(Strings.Right(A, Len(A) - 6))とこの構文を使えばいいのでしょうか? ちなみにdatagridviewは3列あって、そのうちの1列目だけをそうしたいと思います。 普通に表示した場合のコードは以下のようです。     Dim sConn As SqlClient.SqlConnection Dim sda As SqlClient.SqlDataAdapter Dim ds As New DataSet sConn = New SqlConnection () 'SQLへの接続文字列     sda = New SqlDataAdapter("SELECT * FROM         kakeibo",sConn) 'kakeiboから呼び出す条件 sda.Fill(ds) '呼び出す datagridview1.DataSource = ds.Tables(0) '表示

  • 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 __________________________________________ __________________________________________

専門家に質問してみよう