【问题标题】:How to prevent inserting "." "/" and "\" into SQL database as empty string如何防止插入“。” "/" 和 "\" 作为空字符串进入 SQL 数据库
【发布时间】: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


【解决方案1】:

这应该在前端本身处理,而不是转到数据库级别。想象一个无效的文件名到达数据库,它由于您的限制而拒绝并向 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");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多