2017-11-12 9 views
1

私はパラメータ化クエリをサポートしていないライブラリを使用していますので、私はこのようにそれらをエミュレートする関数を記述しようとしています:T-SQLでヌル文字をエスケープするには?

let params = [ String "\x00'blah" ] in 
Mssql.execute ~params "SELECT $1" 

これをテストするために、私はそれの文字列を送信していますすべてのASCII文字、およびエスケープ必要ように見える2つだけである:

  • 'から''
  • \0'としてエスケープする必要が - それはCHAR(0)
  • に変更する必要があるように思えます

ヌル文字の部分は、文字列が開いているかどうかを追跡しておく必要がある場合や、+を追加する必要があるため、エスケープ機能が非常に複雑になります。私はCODE(0)+''''+'a'+'s'+'d'のようなものに変換するはるかに単純なバージョンを書くことができましたが、メガバイトのデータをサーバーに送信すると非常に非効率になると思われます。メガバイトのヌル文字を送信すると、私のバージョンも非効率になります(私はそうするつもりはありませんが、コードに時限爆弾を残すのは嫌です)。

私が思っているのは、これらのnull文字をエスケープする方法はありますか?

(また、私は何も分からないのですか?誰もあなたにまともなT-SQLライブラリへのアクセス権があると思われるので、これに関するドキュメントは見つかりません)。

EDIT:T-SQLではnull文字が動作するはずですが、FreeTDSのdbcmdという文字列がNULL終端であると仮定して使用しているライブラリの制限があります。私は代替機能を見つけることができないようです。 \

+0

?文字列の連結をNULLにしたり、フィルタリングのために 'WHERE'句を使用しているため、' SELECT'節で 'null'を使用することを心配していますか?連結が問題であれば、 'CONCAT'関数を使うことができます(自動的に' null'を空文字列に置き換えます)。 'WHERE'節(または' JOIN')で 'NULL'値を扱おうとするなら、例えば' ISNULL'関数を使ってそれらを扱うことができます。 – gotqn

+2

@gotqn質問は、[ASCII NULL](https://en.wikipedia.org/wiki/Null_character)文字を含む文字列であり、SQL NULL値の処理ではありません。 – HABO

答えて

-2

私はあなたのライブラリを知らないが、私はその単純なSQL操作の良いライブラリを知っている。このライブラリには、書き込みSQLコマンドなしでレコードを挿入、更新、または削除する簡単な方法があります。また、Mergeコマンドをサポートします。レコードが存在するかどうかわからない場合でも、レコードを保存したい場合は、その意味になります。 機密データを暗号化する場合は、このための方法もあります。

ここは例です。

より多くの情報ライブラリのWebサイトの
crypto.SetCryptoKey("DB-TEST-CUST"); 
dRec cust = new dRec("dbo.customer"); 
cust.fields["email"] = "[email protected]"; 
cust.fields["name"] = "John Lennon"; 
cust.fields["description"] = "John's secret world"; 
cust.fields["password"] = "abc123xyz".dEncryption(); //encryption text include some special characters, but methods support this. 
if (cust.Insert() >= 0) 
    return "record inserted"; 
else 
    return "record error:" + db.LastException_Message; 

:あなたは正確にやろうとしている何https://www.dbdll.com/Documentation

関連する問題