c# 在数据库中存储带有“”的变量[已关闭]

问题描述 投票:0回答:1

我有一个存储在 SQLite 数据库中的正则表达式模式,我用它来查找特定的字符串(请参阅下面的 WhatItShouldLookLike)。当我从数据库检索此变量到我的代码中时,它会显示为(请参阅下面的 WhatRegExReads)。 我曾经用@符号对字符串进行硬编码,一切都工作正常,但通常我不喜欢对这样的东西进行硬编码,以防它们发生变化。 我该如何解决这个问题?有没有办法直接读取来自数据库的字符串?

我正在考虑在数据库中出现时输入要替换的关键字,但还没有尝试过。 喜欢查尔(34)。

这是我的问题: 正则表达式找到我想要的东西 enter image description here

但是在它离开数据库之后,它被转换为这个,并且正则表达式找不到我想要的东西 enter image description here

它在数据库中是这样的: enter image description here

硬编码字符串找到 1 个匹配项 在此输入图片描述

数据库中完全相同的字符串没有匹配 在此输入图片描述

代码位于几个不同的函数中。

var whatItShouldLookLike = @"(?<LineSize>[0-9]{1,2}\"")";
var whatRegExReads = @"(?<LineSize>[0-9]{1,2}\\\"\")";

List<Dictionary<string, dynamic>> lst = GetTblToDictionary("McRegEx");
Dictionary<string, dynamic> dict = lst.FirstOrDefault(d => d["PatternName"].Equals("LineNoCleanUp"));

//string regExPatt = @"(?<LineSize>[0-9]{1,2}\"")(?<Dash1>\-)(?<Spec1>\w{1,5})*(?<Spec2>\s{1})*(?<Dash2>\-)(?<Unit>\w{1,3})(?<TankFarm>\-[1-3])*(?<Dash3>\-)(?<PCID>[A-Z]{0,4})(?<Designation>[0-9]{1,4})(?<Dash4>\-)*(?<Insul>[A-Z]{0,2})(?<Dash5>\-)*(?<Trace>[A-Z]{0,3})(?<Winterization>\([W]\))*(?<Dash6>\-)*(?<TCount>[0-9]{0,1})(?<Tsize1>\-)*(?<Tsize2> )*(?<Tsize3>[0-9]{0,1})(?<Tsize4>\/)*(?<Tsize5>[0-9]{0,1})(?<Tsize6>\"")*";
string regExPatt = dict["Pattern"];

public void GetTblToDictionary(string tblName)
{
    try
    {
        string sql = "Select * from " + tblName;
        List<Dictionary<string, dynamic>> lst = new();
        using (var con = new SqliteConnection(ConnString))
        {
            con.Open();

            var command = con.CreateCommand();
            command.CommandText = sql;

            using (SqliteDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    try
                    {
                        Dictionary<string, dynamic> dict = new();
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            //need to get literal here<--------
                            var tmp = reader.GetName(i);
                            dict.Add(tmp.ToString(), reader.GetValue(i));
                        }
                        lst.Add(dict);
                    }
                    catch 
                    {
                    //todo log
                    }
                }
            }
            con.Close();
        }
        return lst;
    }
    catch
    {
        //todo log
        return null
    }

}
c# sqlite quotes .net-8.0
1个回答
0
投票

所以我想通了,我必须将数据库中的字符串更改为如下所示

(?<LineSize>[0-9]{1,2}")
而不是这个
(?<LineSize>[0-9]{1,2}\"")

© www.soinside.com 2019 - 2024. All rights reserved.