2016-04-18 39 views
0

列に次の値があるテーブルにレコードを挿入しようとしています。ここSQLサーバー - バックスラッシュを含む文字列レコードを挿入します。

\\\\a\\b\\c

Database DataProvider = new SqlDatabase(connectionstring); 
DataProvider.ExecuteNonQuery("sprocname", 
        Id, 
        qText, 
       ); 

qTextは値を超えています。実行後、値は\(単一のバックスラッシュ)として表に追加されます。私は、テーブルに手動でレコードを挿入しようとした場合

INSERT INTO mytbl(id, q) VALUES 
(0, '\\\\a\\b\\c') 

適切な値を挿入します。これが起こっている理由は何ですか?ここに何もないのですか?

UPDATEは

私の文字列があるものは何でもすることを、唯一のそれはその列に挿入されたばかりの最初の文字だそうです!理由は分かりません。列のデータ型はvarchar(max)

Exです。

for qText = 'abc', then column has value `a` 
for qText = '\\\\a\\b\\c', then column has value `\` 

答えて

5

バックスラッシュはエスケープシーケンス文字なので、2つのバックスラッシュは1つのバックスラッシュとして解釈されます。この場合バックスラッシュをそのまま使用したい場合は、文字列リテラルの先頭に@を追加する逐語文字リテラルを使用してください。

var qText = @"\\\\a\\b\\c"; 
+0

更新を確認してください – ricky32

0

文字列変数で\を格納している間、あなたは私たちが

String qText = "\\" 

を書く場合qTextの値は\

されるので、エスケープシーケンスとして "\\"

を追加する必要があり

したがって、\\\\a\\b\\cを保存するには、その数は\です。

String qText = "\\\\\\\\a\\\\b\\\\c" 

使用されるこの方法で、qTextの値は\\\\a\\b\\c

+0

更新を確認してください – ricky32

+0

カラムのデータタイプを変更しようとしましたか? – asktonishant

+0

また、テーブルスキーマを共有してください。 – asktonishant

0

になります問題は、ストアドプロシージャにありました。プロシージャーの入力パラメーターはvarcharですが、長さは指定されていません。

+0

[蹴り癖がない:VARCHARを(長さなしで)宣言](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length .aspx) –

+0

@FelixPamittan、あなたは2番目に速かった;-) – Shnugo

関連する問題