none
SqlDataSourceコントロールについて RRS feed

  • 質問

  • いつも、大変お世話になってます。

    開発環境 VS2010, ASP.NET4.0, C#, SQL Server Express

    基本的なことかもしれませんが、現在、WebページのTextBoxの記入内容をデータベースに登録しようとしています。

    そこで、WebページにSqlDataSourceコントロールを配置して、「InsertQuery」にて、テーブルパラメータと、TextBoxを結びつけました。

    また、このテーブルには、登録時刻のパラメータもありまして、上記、結びつけとは別に、設定します。

    Webページのtexbox記入後、登録ボタンをクリックして、下記コードを実行しましたが、

    // 現在の日付時刻を取得しセットする
    DateTime dtNow = DateTime.Now;
    SqlDataSource1.InsertParameters.Add("Date", dtNow.ToString());

    // 入力データをデータベースに保存する
    SqlDataSource1.Insert();

    としたのですが、

    ”変数名 '@Date' は既に宣言されています。変数名は、クエリ バッチまたはストアド プロシージャ内で一意にしてください。”

    のエラーが発生します。

    アドバイスを頂ければありがたいです。よろしくお願い致します。

    2012年7月10日 22:51

回答

  • 情報ありがとうございます。IE7だとうまく表示されないのですね。手元のIE8で確認してみましたが、IE8では表示されました。以下はIE9で表示されている状態の画像です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク noriyasu 2012年7月11日 12:54
    2012年7月11日 7:49
    モデレータ

すべての返信

  • SqlDataSource1.InsertParameters.Add("Date", dtNow.ToString());

    これはDateというパラメータを追加しようとしています。.aspxファイルでDateというパラメータは既に定義されているため、さらにDateというパラメータを追加しようとしてエラーになっているのだと思います。Dateとうパラメータに値を入れたいのであれば、以下のようになります。

    SqlDataSource1.InsertParameters("Date").DefaultValue = dtNow.ToString();
    #訂正。正しくはInsertParameters["Date"]です。

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/



    2012年7月11日 0:23
    モデレータ
  • trapemiva様

    アドバイスありがとうございます。

    エラーの原因は理解できました。しかし、パラメータに値を入れるソースコードですが、見れない状態で表示されています。

    出来ることなら、再度、記入を御願いしたいのですが...。

    よろしく御願い致します。

    2012年7月11日 3:36
  • 見れないとは表示されていないということですか? 私の環境では見えています。ブラウザはIE9です。
    ソースを再掲載します。今度はコードブロックで囲まず、単なる文字列で掲載します。

    SqlDataSource1.InsertParameters("Date").DefaultValue = dtNow.ToString();

    #訂正。正しくはInsertParameters["Date"]です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/



    2012年7月11日 4:00
    モデレータ
  • 横やりすみません。

    私の環境ではこう見えています。IE7です。はぁ、今までのWEBシステム見直しが必要になりそうです。勉強になりました(泣)…。

    2012年7月11日 7:25
  • 情報ありがとうございます。IE7だとうまく表示されないのですね。手元のIE8で確認してみましたが、IE8では表示されました。以下はIE9で表示されている状態の画像です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク noriyasu 2012年7月11日 12:54
    2012年7月11日 7:49
    モデレータ
  • trapemiya様

    再度、回答頂きまして、ありがとうございます。

    おかげさまで、また少し学習を進めることが出来ます。

    ちなみに、昼見ていたブラウザはIE7でした、今家のIE9では見ることが出来ました。

    今後とも、よろしくお願い致します。

    2012年7月11日 12:54
  • terapemiya さん>

    言語は C# のようですが、以下のところで ( ) は [ ] でなくて
    問題ないのでしょうか?

    > InsertParameters("Date")


    noriyasu さん>

    SqlDataSource の InsertParameters に、

    <asp:Parameter Name="Date" Type="String" />

    のようにパラメータを設定済みなのに、同じ名前のパラメータ
    を追加しようとしたからではないのですか?

    そうであれば、SqlDataSource.Inserting イベントのハンドラ
    で、以下のように、設定済みのパラメータに代入すればうまく
    いくはずです。

    protected void SqlDataSource1_Inserting(object sender,
        SqlDataSourceCommandEventArgs e)
    {
      e.Command.Parameters["@Date"].Value = DateTime.Now.ToString();
    }


    2012年7月11日 13:17
  • terapemiya さん>

    言語は C# のようですが、以下のところで ( ) は [ ] でなくて
    問題ないのでしょうか?

    ご指摘ありがとうございます。ネットでコードを探してコピーしたのですが、探したコードがVBで訂正し忘れてしまいました。言い訳がましいですが、後で自分の投稿を見た際に違和感を感じていて、後でちゃんと見直そうと思ってそのままになってしまいました・・・(^^;


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2012年7月12日 0:58
    モデレータ