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