web-dev-qa-db-ja.com

VB6の文字列で引用符をエスケープする

古いVB Webアプリに小さな変更を加えようとしています。これまで運がなかった文字列内に引用符を追加する必要があります。文字列は

Dim sql As String = "Select * from  Usertask Where UserId = " & Session("UserId") & " and JobID=" & ddlReqTask.SelectedValue

Session( "UserID")値を引用符で囲む必要があります。

18
Adonis L

""を使用して、文字列に引用符を挿入できます。例:

dim sometext as String = "Hello ""Frank"" how are you?"

それはあなたに

こんにちは「フランク」お元気ですか?

31
ilivewithian

見積もりをエスケープするには、別の見積もりを追加する必要があります。これが必要なものだと思います。

Dim sql As String = "Select * from  Usertask Where UserId = """ & Session("UserId") & """ and JobID=" & ddlReqTask.SelectedValue
12
KevB

このようなアドホックSQLステートメントを作成するのではなく、パラメーター化されたSQLを使用することをお勧めします。これは、SQLインジェクションを受け入れることができるためです。これは、引用符を文字列に連結することを心配する必要がないことを意味します。また、実行プランのキャッシュと再利用が可能になるため、クエリのパフォーマンスも向上します(SQLサーバーを想定)。

例えば.

Dim sql As String = "Select * from  Usertask Where UserId = ? AND JobID = ?"

次に、2つのADODB.ParametersをCommandオブジェクトに追加して、2つのパラメーターの値を指定します。

Set param = New ADODB.Parameter
param.Name = "@UserId"
param.Direction = adParamInput
param.Type = adVarChar
param.Size = (give size of user id field)
param.value = Session("UserId")
yourADOCommand.Parameters.Append param

また、JobIdパラメーターについても同じです。

6
AdaTheDev

これはSQLインジェクションの脆弱性であり、[〜#〜] not [〜#〜]実行する必要があります。このようにすることで、次のようなUserIdを与えることで、ユーザーが必要なクエリを実行できるようになります。

'; DROP TABLE Usertask; --

代わりに、パラメーターを使用してください。 SQLの実行方法に応じて、さまざまな方法があります。 SQLクエリを実行するコードを教えてください。


あなたの質問に答えて、

Dim StringWithQuotes As String = "Hello, I've got ""Quotes""!"

この文字列は

こんにちは、「見積もり」があります!

5
SLaks

連結でChr(34)を使用することもできます。

Dim sql As String = "Select * from  Usertask Where UserId = " & Chr(34) & Replace(Session("UserId"), Chr(34), Chr(34) & Chr(34)) & Chr(34) & " and JobID=" & CLng(ddlReqTask.SelectedValue)

どちらの方法でも機能します(他の例とこれ)。混乱が少ないのでこれを好む人もいますが、上記の例は完全に判読可能であり、ロケット科学は非常に重要です。

4
Ben

私の経験では、ほとんどのSQLサーバーでは、文字列を一重引用符で囲む必要があります。そのための最良の方法は、SQLパラメータを使用して.netを自分で管理することです。これがサンプルです(VB.Netにもあります): http://www.knowdotnet.com/articles/dynamicsqlparameters.html
これには、SQLインジェクションに対するセキュリティの利点もあります。

0
Kobi

こんな感じです..

dim user_id as string="SomePerson"
debug.print "UserId=" & chr(34) & user_id & Chr(34)

生成します。

UserID="SomePerson"   
0
Mike Dickerson