【发布时间】:2018-05-03 11:28:36
【问题描述】:
在我的代码中我有这个
string specialChar = @"\|!#$%&/()=?»«@£§€{}.-;'<>_,";
我想要实现的是,我试图将此字符串中的每个字符插入数据库,并且数据库每次都应该抛出异常,因为它有一个约束,只允许字母和数字插入。
一切正常,除了三个字符 - ".", "/" and "\".
不知何故,这些值仍然被插入到表中,因为它们被转换为空字符串。我不知道为什么,但也许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]%')
上传.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();
【问题讨论】:
-
您是否有一个示例说明您将这些值存储在哪里并且它意外地工作了?您如何/在哪里对
specialChar进行测试 - 我们可以看看吗? -
你的约束是什么样的?你是如何将它们插入到 SQL 中的?你试过原始 SQL 吗?
-
那段代码真的没用...上传有什么用,数据中有什么...等等。等请阅读有关如何为您的问题创建Minimal, Complete, and Verifiable example 的说明
-
您在约束中使用了正则表达式。你确定它有效吗?
-
原始 SQL 阻止插入,所以我认为约束是好的......现在我认为它的 Path.GetFileNameWithoutExtension() 给出了问题。可以吗?
标签: c# sql sql-server entity-framework-6 special-characters