質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

1回答

1900閲覧

?の意味

hoshx

総合スコア16

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

1クリップ

投稿2016/04/20 04:58

###発生している問題
asp.netの.asp.csファイル内のコードで"?"にどういう意味があるのかわかりません。

SQL文が格納されたqueryBuilderという変数にWhere文を追加していることはわかっています。

###該当のソースコード

queryBuilder.Append("WHERE UserPresetID = ?UserPresetID;");

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

前後の処理が見えないので違っているかもしれませんが、ADO.NET の SqlCommand に使う、パラメーター付きクエリー文字列ではないでしょうか。

これは簡単に言うと、実行時に変化するクエリー文字列を組み立てる処理を、例えば・・・

C#

1int userId = 100; 2String queryString = "SELECT * FROM USERS WHERE ID = " + userId;

のように書くことがあると思いますが、これと同じことを・・・

C#

1String queryString = "SELECT * FROM USERS WHERE ID = @UserId"; 2SqlCommand cmd = new SqlCommand(queryString, connection); 3cmd.Parameters.Add("@UserId", SqlDBType.int); 4cmd.Parameters["@UserId"] = 100;

このように記述する方法です。詳しくは、MSDNリファレンスをご参照ください。

・・・と、上記のように思いますが、ADO.NETでは通常プレースホルダ文字列の先頭を @ にするのが一般的です。質問にある文字列は ?xxx となっていますよね。あまり、というか見たことの無い書き方です。なので、もしかすると全然違う話なのかもしれません。

パラメーター付きクエリー文字列は Java や PHP にもある機能で、これらの言語ではプレースホルダーとして ? が使われます。なので、これは想像でしかありませんが、このコードの元の作者がJavaかPHPの経験者だったのではないでしょうか。

投稿2016/04/20 05:46

tkanda

総合スコア2425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshx

2016/04/20 05:48

なんとなくそんな感じがします。?でも、同じ意味で使うんですね。
tkanda

2016/04/20 06:03

繰り返しになりますが、プレースホルダー文字列を ?xxx としているコードは過去に見たことはありませんし、私自身もそのようにコーディングした経験はありません。 なので、実際に問題なく動作するとは断定できません。(推測としては多分問題なく動くだろう、と思います。)
twck

2016/07/20 01:26

"?"はADO.NETではなくADOの頃に位置パラメーターでよく見たことがあります。 普通は "?" の1文字だけで使います。 例えば以下のサイトで例を見ることができます。 https://support.microsoft.com/ja-jp/kb/181734 Cmd1.CommandText = "SELECT * FROM Authors WHERE AU_ID < ?" DBの種類は関係ないらしく、ORACLEにつなぐときも出来るようです。 http://blog.livedoor.jp/it_ikiru/archives/50422207.html dsSQL = "SELECT * FROM テーブル名 WHERE 項目名1=? AND 項目名2=?" 位置パラメーターはSQL文中の "?" の出現順番とパラメーターを追加した順番を一致させる必要があるので、"@xxx"のように後ろに識別名をつける名前付きパラメーターに比べて SQL文の変更に弱いものでした。 ちなみに以下のサイトを見ると ADO だけでなく System.Data.OleDb や System.Data.Odbc でも使うようです。 https://msdn.microsoft.com/ja-jp/library/yy6y35y8(v=vs.110).aspx ADOやODBCからADO.NETへ移植したときに直し漏れた可能性も考えられますし、名残として "?" を使い続けている可能性もあります。 "@"が一般的とはいえ、社内では"?"に統一している場合もあると思いますので、周りの人に相談してみるのが一番です。 あとお願いなのですが、ASP.NETには関係ない事柄なので、質問のタグからASP.NETを削除して、ADO.NETとSQLを追加してもらえないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問