none
ストアドプロシージャの利用 RRS feed

  • 質問

  • お世話になります。

     

    Visual Studio 2005(vb使用)

    SQL Server 2005

     

    上記環境で開発を行っております。

     

    SQLサーバ内のSP(ストアドプロシージャ)クエリをしたく

     

    Dim SQLCommand As SQLCommand = SQLServerDB.CreateCommand()

    Dim Params           As SQLParameter

     

    SQLCommand.CommandText = "@StoredProcedure"

    SQLCommsnd.CommandType = CommandType.StoredProcedure

     

    Params = SQLCommand.Parameters.Add("@Argument", SqlDbType.NVarChar, 100)

    Params.Value = Argument

    SQLCommand.Parameters("@Argument").Value = Params

     

    Num = SQLCommand.ExecuteNonQuery()

    Console.WriteLine(Num)

     

    と、記述しているのですが、

    SQLサーバのSPに巧く、引数が渡りません。

    修正点、参考ページ等があればご教授お願いします。

    2007年11月30日 7:29

回答

  • trapemiya さん

    たびたび、お手数をお掛けします。

     

    言われている通り、

    SQLCommand.Parameters.AddWithValue("@Argument", Argument)

    使えました。

    調べた結果、これまた言われている通りスペル不一致が原因でした。

    本当にありがとうございます。

    また、お世話になるときがあるかも知れませんが、

    そのときは、どうぞよろしくお願いします。

     

     

    2007年12月3日 6:23

すべての返信

  • SQLCommand.Parameters("@Argument").Value = Params

    は必要ありません。

    また、

    SQLCommand.Parameters.AddWithValue("@Argument", Argument)

    と一文だけで、パラメータ追加とそのパラメータへ値をセットすることもできます。

     

    また、ストアドプロシージャ名の頭に@を付けることはできないと思います。(できていますか?)

    2007年11月30日 7:47
    モデレータ
  • trapemiya さん

     

    ありがとうございます。

    早速言われていた点を修正してみましたが、

     

    SQLCommand.Parameters.AddWithValue("@Argument", Argument)

     

    と記述し直しても、巧くいきません。

    上記コードをヘルプ検索して見てのですが、

    Odbc接続に対応するものの様で

    ADO.NETでのSQLServerへの接続の場合、

     

    プロシージャまた関数、”@StoredProcedure”にはパラメータ”@Argument”が必要ですが、設定されませんでした

     

    とのエラーが出てきます。

    他にも何か原因があるのでしょうか?

     

    PS.ストアドプロシージャの頭に@はつけていません。

    今回のコード記述の際に、解かり易くしようと思いつけてみました。

     

    2007年12月3日 0:33
  • SQL serverでもAddWithValueは使えますよ。

     

    SqlParameterCollection.AddWithValue メソッド
    http://msdn2.microsoft.com/ja-jp/library/system.data.sqlclient.sqlparametercollection.addwithvalue(VS.80).aspx

     

    以下の記述で動くはずです。

     

    SQLCommand.CommandText = "HogeStoredProcedure";
    SQLCommand.CommandType = CommandType.StoredProcedure;

     

    SQLCommand.Parameters.Clear();
    SQLCommand.Parameters.AddWithValue("@Argument", Argument);

     

    Num = SQLCommand.ExecuteNonQuery();

     

    @Arugumentのスペル不一致や、Argumentに正しく値が入っているかをチェックしてみて下さい。

    2007年12月3日 1:25
    モデレータ
  • trapemiya さん

    たびたび、お手数をお掛けします。

     

    言われている通り、

    SQLCommand.Parameters.AddWithValue("@Argument", Argument)

    使えました。

    調べた結果、これまた言われている通りスペル不一致が原因でした。

    本当にありがとうございます。

    また、お世話になるときがあるかも知れませんが、

    そのときは、どうぞよろしくお願いします。

     

     

    2007年12月3日 6:23