Vb .netオブジェクト属性に応じて値を変える方法

このQ&Aのポイント
  • Vb .netオブジェクトの属性に応じて値を文字列に加工して渡す方法について詳しく教えてください。
  • オブジェクトの属性の判定方法や値の加工方法についてわからないことがあります。
  • Vb .netでオブジェクトの属性に応じて値を変える方法について、詳しい手順を教えてください。
回答を見る
  • ベストアンサー

Vb .net オブジェクトの属性に応じて値を変え

Vb .net オブジェクトの属性に応じて値を文字列に加工して渡したいです。 DataTableのセルやStringやIntegerやdateなどの値が渡されることを想定しています。 postgresqlのWhere句に渡す事を想定しています。 strTmp = TestTest(Object1) strSql = "Where item1 = " & strTmp <内容> ・オブジェクトの値がDBNull.Valueなら文字列で"null" ・数字属性の場合、  文字列に変換して数字を渡す ・日付属性の場合、  文字列に変換して値を渡す ・文字属性の場合、  シングルクオートした値を渡す。 ・上記以外は文字列で"null"を渡す。 <書きかけ> function TestTest(byref p01 Object) As String dim aaaa as object dim bbbb as string if aaaa is DBNull.Value then bbbb = "null" else Select Case aaaa 属性 Case 数字の場合 bbbb = aaaa.toString Case 文字の場合 bbbb = "'" & aaaa.toString & "'" Case 日付の場合 bbbb = "'" & to_timestamp('" & Format( aaaa, "yyyy.mm.dd hh:nn:ss" ) & "', 'YYYY.MM.DD HH24:MI:SS')" Case Else bbbb = "null" End Select end if Return (bbbb) end function <メモ> ・属性の判定方法が分かりません。 ・何か見落としている事はありませんか? 以上、よろしくお願いします。

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

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

> ・属性の判定方法が分かりません。 TypeOf演算子を使うと変数の型を取得できます。 Select Case True   Case TypeOf aaaa Is Integer     '整数の場合   Case TypeOf aaaa Is String     '文字列の場合   Case TypeOf aaaa Is DateTime     '日付の場合   Case aaaa Is DBNull.Value     'DBNullの場合   Case Else     'その他 End Select > ・何か見落としている事はありませんか? 細かいことを言うと、TestTestの引数p01が使われていないですが……。 また、 > ・文字属性の場合、 >  シングルクオートした値を渡す。 SQLインジェクションへの対策は大丈夫でしょうか?

webuser
質問者

お礼

有難う御座います。 > 細かいことを言うと、TestTestの引数p01が使われていないですが……。 orz aaaaa = p01 が1行目にある事にして下さい。 > SQLインジェクションへの対策は大丈夫でしょうか? 限定的なWindowsアプリなので、あまりシビアに考えてませんが、ダメでしょうか?

その他の回答 (1)

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.2

> 限定的なWindowsアプリなので、あまりシビアに考えてませんが、ダメでしょうか? 自分しか使わない、とかならそれもありですが……。 まぁ対策と言っても、ただ問題になりそうな文字をエスケープするだけですから、 ついでにやっておいて損はないかと思います。

関連するQ&A

  • オブジェクト参照がオブジェクト インスタンスに設定されていません  というエラーについて

    タイトルの「オブジェクト参照がオブジェクト インスタンスに設定されていません」についてですが、 このエラーは、 null を参照しようとして例外が発生している エラーだと解釈しているのですが、nullでないのに、このエラーが出る場合はどのように対処すればいいのか教えてください。 下記のような文があるとします。 Dim aaa as String 'aaaは、データベースからデータをとってきています。 If aaa IsNot DBNull.Value Then DropDownList.SelectedItem.Text = aaa.TrimEnd 'ここでエラー End If aaaは、NullではないのでIf文の中に入っていくのですが、DropDownListにデータを入れようとすると、タイトルのようなエラーが発生します。 デバッグでaaaの値を見ても、ちゃんとデータが入っているし、Nullではないのですが、なぜこのようなエラーが出るのかわかりません。 このエラーは他に違う意味があるのでしょうか? また、他に影響している部分があるのでしょうか? どなたか教えてください。 よろしくお願いいたします。

  • オブジェクト型とプリミティブ型について

    オブジェクト型とプリミティブ型について プリミティブ型は Javascriptにおけるプリミティブ型とは、下記は値そのものが入っている。 * 数値型 * 文字列型 * ブーリアン型 * null型 * undefined型 上記5つのどれかその物が入っている オブジェクト型は配列がこれなのはわかるのですがオブジェクトもオブジェクト型なのでしょうか?他にもありますか? こちらや値そのものが入っておらず、アドレスのみが入っているのですよね?

  • 属性の値に特殊文字が大量にあるとMSXMLで読み込めない

    MSXMLを使って、属性の値に特殊文字(「<」「>」「&」など)が 大量に使われているXMLを読みこもうとすると失敗します。 正常なXMLと認識されないようです。 「Load」を使ってファイルから読み込んだ場合もダメ。 「LoadXML」で文字列から読み込んだ場合もダメ。 以下のようなVBAコードで再現できます。 --------- Dim oDom As New MSXML2.DOMDocument With oDom.appendChild(oDom.createElement("root"))   With .Attributes.setNamedItem(oDom.createAttribute("attr"))     '.nodeValue = String(65533, "<") 'OK     .nodeValue = String(65534, "<") 'NG   End With End With oDom.loadXML oDom.XML '←正しく読み込めない --------- MSXML4でもMSXML6でも同様でした。 これはバグ、それとも仕様なのでしょうか。 探してもそれらしい資料が見つかりません。 どなたかわかる方、教えてください。 補足ですが、 実は同様のXMLファイルをIE6に読ませようとした場合にも、エラー表示されます。 エラーメッセージは「エラーを特定できません」。 FireFoxだとOKのようです。

    • 締切済み
    • XML
  • STLのstringのサイズが0なのに、printfできちゃうのはなぜ

    STLのstringのサイズが0なのに、printfできちゃうのはなぜ? たとえば、以下のような小文字変換処理を考えます。 std::string str = "ABC"; std::string strTmp = ""; std::transform( str.begin(), str.end(), strTmp.begin(), ptr_fun(::tolower) ); この時、strTmpには"abc"が入っていると思っていたのですが、 strTmp.compare("abc") が0になりませんでした。strTmp.size()が0になっており、どうも空文字""と認識されているようです。 ですが、 printf( strTmp.c_str() ); とすると、"abc"と出力されます。printfで上記のようにデバッグしていたので、なかなかミスが発見できなかったのですが、strTmpの初期化で""を入れているために、compareがうまく動かなかったようです。 std::string strTmp = ""; のところを std::string strTmp = str ; と直すと、compareが期待通りに動きました。 長くなってすみませんが、ここからが質問です。 1.stringの初期化時に確保した文字列長は、その後変更できないのでしょうか?今まで、普通に""で初期化した後、別の文字列を代入したりしていたような気がするのですが…。 2.strTmpのサイズが0にもかかわらず、printfで(一見)期待通りの結果が出力されたのは、なぜでしょうか?printfは、ヌル文字までを出力する仕様みたいですが、そもそもstringのsize()も、ヌル文字までの長さを返すのではなかったでしょうか。 全ソースは、以下の通りです。 #include <string> #include <algorithm> #include <functional> #include <ctype.h> #include <stdio.h> int main() {  std::string str = "ABC";  std::string strTmp = ""; // strにすると動く  std::transform( str.begin(), str.end(), strTmp.begin(), std::ptr_fun(::tolower) );  printf( "compare = %d\n", strTmp.compare("abc") );  printf( "size = %d\n", (int)strTmp.size() );  printf( "strTmp = %s\n", strTmp.c_str() );  return 0; }

  • stringオブジェクト

    あるテキストの問題に 「STRINGオブジェクトはいくつ作成されますか? String a,b,c; a="1234"; b=a; c=a+b; 」 というのがあったんですが、答えは2個でaとb。 cはストリング文字列だから、という答えでした・・・ えーーー?!? とびっくりしてしまいました。 なぜなら、"1234"というのも文字列だと認識していたからです。 StringオブジェクトとString文字列の境目は何ですか?

    • ベストアンサー
    • Java
  • [Excel]重複データの一方のセルが持つ値を一方の空白セルに反映させたい

    A列にある7000件ほどのデータの中から重複データのみを抽出し、 重複データの一方がB列に持つ値を、もう一方のデータのB列の空白セルに反映させたいのですが、方法はありますでしょうか? 「COUNTIF」を使って重複データの抽出はできますが、一方が持つデータをもう一方の空白に反映させることができません。 手作業では期限に間に合わない可能性がみえて焦っております。 恐縮ですがご教授いただけますでしょうか。 (例) [処理前] A列:B列:C列 1111:AAAA:aaaa 2222:BBBB:bbbb 3333:CCCC:cccc 1111:    :dddd 2222:    :eeee [処理後] A列:B列 1111:AAAA:aaaa 1111:AAAA:dddd 2222:BBBB:bbbb 2222:BBBB:eeee

  • VB2008: 構造体に関するMSDNの解釈について!

    ' ================== ' 構造体変数の代入 ' ================== Module theTEST   Private Structure TEST4     Dim MembersCount As Integer     Dim Member1 As String     Dim Member2 As String   End Structure   Sub Main()     Dim T4_1 As TEST4     Dim T4_2 As TEST4     T4_1.MembersCount = 1     T4_1.Member1 = "T4_1:Member1"     T4_1.Member2 = "T4_1:Member2"     T4_2 = T4_1     Debug.Print(T4_2.MembersCount.ToString)     Debug.Print(T4_2.Member1)     Debug.Print(T4_2.Member2)   End Sub End Module [イミディエイト ウインドウ] 1 T4_1:Member1 T4_1:Member2 >構造体の要素が文字列型 (String) やオブジェクト型 (Object) などの参照型である場合は、データへのポインタがコピーされます。 (http://msdn.microsoft.com/ja-jp/library/18ytyskd(VS.80).aspx) このMSDNライブラリの説明によると、 [イミディエイト ウインドウ] 0 T4_1:Member1 T4_1:Member2 という結果を得るというのが私の予測。 もしかしたら、MSDNライブラリの説明の舌足らず。 >構造体の要素が値型であらば値がコピーされますが、文字列型 (String) やオブジェクト型 (Object) などの参照型である場合は、データへのポインタがコピーされます。 ということでしょうか?

  • 見えないバイト数

    見えないバイト数がいます。 何か原因わかりませんでしょうか? とあるプログラムから取得した文字列を print関数を使ってブラウザに出力しました。  print "$AAAA"; この出力された文字列をブラウザからコピーし、 同一プログラム内に$BBBBという変数で定義します。  $BBBB = "コピーしてきた文字列"; ここで$AAAAと$BBBBは同じもののはずなのですが、 if 関数で比較するとなぜかFALSEが返ります・・・。  if($AAAA == $BBBB){   print "AAAAとBBBBは同じです。"; //←こっちが出力されてほしい  } else {   print "AAAAとBBBBは違います。"; //←こっちが出力される  } 文字列のバイト数を調べる「strlen」関数を使用すると、 AAAAが69バイト、BBBBが61バイトと 8バイトの差があります。 どちらを(printで)出力しても目には見えないので 困っております・・・。 なにか心当たり、解決策をご存じの方いらっしゃいませんでしょうか?? ちなみにAAAAとBBBBは、 半角英数+記号(&%/?)で構成されています。

    • ベストアンサー
    • PHP
  • 行の削除

    エクセル2003で作業しています。 AAAA BBBB AAAA BBBB …… …… というような感じで文字が数千、列になっていて、このB行だけを全て削除したいんですが どういうやり方があり、簡単でしょうか?

  • NULLか空文字かの判別(DBの値)

    VB.NETで、Access(mdb)のテーブルから DAOでデータ取得し、取得したレコード毎に値のチェック処理をします。 その値がNULLかどうかは、isDBNULL関数を使用すれば判定できますが、 空文字についてはどう判定すればわかりますでしょうか?? String型にキャストして「= ""」で判定しようとしましたが、 空文字の場合だとString型にキャストする際にエラーが発生します。 家で試せる環境にないので、エラーが出るかどうかわからないのですが String.IsNULLOrEmptyで判定できるのでしょうか? これもString型にキャストする必要がありそうなので、エラーが出るようにも思います・・・。 オブジェクト型の値が空文字かどうか判定する方法を教えていただけないでしょうか。