2017-11-20 21 views
1

は、私は、私が達成しようとしているこれは何挿入するのを防ぐ方法 "。" 「/」と「」SQLデータベースに空の文字列としての私のコードで

string specialChar = @"\|!#$%&/()=?»«@£§€{}.-;'<>_,"; 

を持っていることは、私は、この文字列から一つ一つの文字を挿入しようとしているということです文字列と数字のみを挿入できるようにするため、例外をスローする必要があります。彼らは空の文字列に変換されるため、".", "/" and "\".

どういうわけか、これらの値がまだテーブルに挿入されます -

すべてが3つの文字を除き、良い作品。理由は分かりませんが、おそらくEF6がそうしています。

悲しいことに、empty/NULLの値を許可しないという制約を追加することはオプションではありません。

なぜ、どのようにこれらの文字を空の文字列に変換しないようにするのですか?私は特殊文字を防ぐために使用してい

byte[] data = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }; 

foreach (var item in specialChar) 
{ 
    try 
    { 
     string tempName = item.ToString(); 
     upload.Upload(tempName, data); 
    } 

    catch (Exception ex) 
    { 
     // this is not being thrown at specified characters 
    } 
} 

制約:

CONSTRAINT [ck_No_Special_Characters] CHECK (NOT [name] like '%[^A-Z0-9]%') 

Upload.cs

 var db = new testEntities(); 
     var fileToUpload = new testFile(); 

     // **this is where I'm using my chars** 
     fileToUpload.name = Path.GetFileNameWithoutExtension(name); 
     fileToUpload.extension = Path.GetExtension(name); 
     fileToUpload.data = data; 

     db.test.Add(fileToUpload); 
     db.SaveChanges(); 
+1

あなたはそれらの値を格納しているし、それが予期せずに働いている場合の例を持っていますか?どのように/あなたは 'specialChar'のためのテストを適用していますか - 私たちはそれを見ることができますか? –

+0

あなたは何のように見えますか?どのようにそれらをSQLに挿入していますか?生のSQLを試しましたか? – Liam

+0

そのコードは本当に助けにはなりません...アップロードは何をするのですか?あなたの問題の[最小限で完全で検証可能な例](https://stackoverflow.com/help/mcve)を作成する方法の説明をお読みください – Liam

答えて

0

。これは、フロントエンド自体の代わりに、データベースレベルに行くに処理する必要があります。無効なファイル名がデータベースに届いたとすると、制約のために拒否され、UIに報告されます。あなたは資源を無駄にしています。

これをUIで処理すると、不要なデータベース呼び出しが節約されます。

使用GetInvalidFileNameChars方法:

if (name.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) == -1) 
{ 
    var db = new testEntities(); 
    var fileToUpload = new testFile(); 

    // **this is where I'm using my chars** 
    fileToUpload.name = Path.GetFileNameWithoutExtension(name); 
    fileToUpload.extension = Path.GetExtension(name); 
    fileToUpload.data = data; 

    db.test.Add(fileToUpload); 
    db.SaveChanges(); 
} 
else 
{ 
    Console.WriteLine("Filename has invalid characters"); 
} 
関連する問題