- - PR -
string及びstringBuilderのreplaceについて
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-23 11:37
こんにちわ、またしてもよくわからない動作があるのでどなたかご教示下さい。
Win2000 VS.NET2003 VB.NET WEBフォームを使用しています。 SQLをコンスタントで記述し、変数をロジック内で置換する為に以下のコードを 書いているのですが、置換されずにそのまま処理されてしまいます。 【コード】 private const SQL = "SELECT * FROM table WHERE aaa = '@aaa'" Dim sbSQL As New StringBuilder(SQL,50) sbSQL.Replace("@aaa",Cstr(Session("aaa"))) SQL文をログ出力してみると、置換されていません。 原因がわからないのでご存知の方よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2006-01-23 11:43
以下のようなコードでテストしました。
問題なく sbSQL 自身のインスタンスは置換できています。 原因は別のところ (SQL を渡すところ) か、Session("aaa") にあると思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-01-23 11:57
早々の回答ならびに動作確認までありがとうございます!
そうですよねぇ。なぜにうまく動作しないのか・・・ もしかして値渡しと参照渡しが関係しているのでしょうか? コードの詳細は以下の通りです。 【コード】 Private Const SQL As String = "SELECT * FROM table WHERE aaa = '@aaa'" TextBox1.Text = recordCount(SQL) Private function recordCount(ByVal sql As String) as int32 Dim sbSQL as New StringBuilder(sql,50) @sql.Relpace("@aaa", "MakiMakiLove") または AsbSQL.Relpace("@aaa", "MakiMakiLove") End Private どちらもうまく動作しません。やはり別の原因が理由でしょうか。 | ||||||||||||||||
|
投稿日時: 2006-01-23 12:17
関係ないところですが、TextBox の Text プロパティは String 型です。 TextBox1.Text = recordCount(SQL).ToString() とすべきです。
これでは、当然無理でしょう。 Dim stDest As String = sql.Replace("@aaa", "MakiMakiLove") のように Replece が返す値を受け取られないと。
StringBuilder であるならば、こちらは ToString() すれば期待通りの結果が取得できるでしょう。 こちらのコードでもダメですか? Dim sb As System.Text.StringBuilder = sbSQL.Replace("@aaa", "MakiMakiLove")
式ウォッチなどで見て検証すべきです。 私は説明の都合上、MessageBox.Show を書きました。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-01-23 12:24
期待通りの動作を確認しました。 (recordCount メソッドの戻り値は意味なしですが) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-01-23 13:30
MSDNクラスライブラリ - StringBuilder.Replace メソッド (String, String)
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemtextstringbuilderclassreplacetopic2.asp
| ||||||||||||||||
|
投稿日時: 2006-01-23 14:16
private const SQL = "SELECT * FROM table WHERE aaa = '@aaa'"
の文字列が変わってなかったんでしょうね。 ※わざわざStringBuilderを使っていてこの間違いはある意味珍しいと思う。 | ||||||||||||||||
|
投稿日時: 2006-01-23 16:41
レス遅くなってすみません。(別システムの障害対応してました・・・)
みなさん回答ありがとうございます! あぁ・・・ぜんぜん理解してませんでした、StringもStringBuilderも。 sql = sql.Replace("@aaa","MakiMakiLove") で無事に置換できました。 stringBuilderも同様に戻り値を再設定してませんでした。 ありがとうございました。 |