/ / Jak zapobiec wstawianiu "." "/" I "" do bazy danych SQL jako pusty ciąg znaków - c #, sql, sql-server, entity-framework-6, znaki specjalne

Jak zapobiec wstawianiu "." "/" I "" do bazy danych SQL jako pusty ciąg znaków - c #, sql, sql-server, entity-framework-6, znaki specjalne

w moim kodzie mam to

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

To, co próbuję osiągnąć, to to, że próbujęwstaw każdy znak z tego łańcucha do bazy danych, a baza danych za każdym razem powinna wyrzucać wyjątek, ponieważ ma ograniczenie, pozwalając na wstawianie tylko liter i cyfr.

Wszystko działa dobrze, z wyjątkiem trzech postaci - ".", "/" and "".

W jakiś sposób te wartości nadal są wstawiane do tabeli, ponieważ są konwertowane na puste ciągi. Nie jestem pewien dlaczego, ale może EF6 to robi.

Niestety, dodawanie ograniczenia nie pozwala empty/NULL wartości nie są opcją.

Wszelkich pomysłów, dlaczego i jak zapobiec konwersji tych znaków do pustych ciągów?

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
}
}

Więź, której używam do zapobiegania znakom specjalnym:

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();

Odpowiedzi:

0 dla odpowiedzi № 1

To powinno być obsługiwane na samym przednim końcuzamiast iść na poziom bazy danych. Wyobraź sobie niepoprawną nazwę pliku docierającą do bazy danych, która odrzuca z powodu twoich ograniczeń i raportów z powrotem do interfejsu użytkownika. Marnujesz zasoby.

Obsługa tego w interfejsie użytkownika pozwoli zaoszczędzić niepotrzebne połączenia z bazami danych.

Posługiwać się GetInvalidFileNameChars metoda:

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");
}