从.txt文件中读取SQL查询以获取C#

Jos*_*osh 3 c# sql ado.net winforms

以前,我问我的问题,我想让你知道我对C#中的winforms很新.:)所以,我正在尝试使用C#创建一个winform,并且为了从后端获取数据,我将所有SQL查询存储在.txt文件中.在.txt文件中输入SQL查询的格式如下:

// Caption

Query

end
Run Code Online (Sandbox Code Playgroud)

所以,在我的代码中,我开始在循环中读取文件并阅读,直到我得到我需要的标题.有一次,我得到了我的标题,我开始逐行阅读查询,直到我达到"结束".在我得到查询后,我明确地替换了查询中的变量(因为我知道查询是否有变量).例如,

// Caption 1

Select * from table_1 where col1 = var1;

end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我读取查询并使用string.Replace()将"var1"替换为var1.ToString().然后,执行查询.

我的问题是,有更好的方法吗?比如,是否有更好的格式将查询存储在.txt文件中?任何建议将不胜感激.谢谢.

Cha*_*ell 6

警告:我实际上不会这样做,但这是试图回答这个问题.我的官方立场在底部.

如果我正确地阅读您的问题,您的斗争实际上是"解析"文本文件以获得所需的查询.如果是这种情况,我强烈建议不要使用直接text来完成这项任务.您需要某种结构,以便程序知道"如何"获取适当的信息. 标记语言基本上是结构化文本,允许程序导航文档.

有许多标记可以使用,这里有一些可以满足您的需求.

  1. 如果你试图将它保存在一个.txt文件中,并保持它非常简单,你可以尝试使用像toml这样的东西,并用toml.net 或类似的东西解析它
  2. 更优选的方法是使用JSON(也是文本),然后使用JSON.NET来解析数据.
  3. 最后,您可以使用XML并使用XML进行解析XmlReader

现在,因为您需要解析数据,所以您应该创建一个存储此信息的模型.

// note this is a JSON example, but you can replace it with whatever Markup parser you like.
public class SqlQueriesFromJsonModel {
    public class Query{
        public string Caption { get; set; }
        public string Query { get; set; }
    }

    public List<Query> Queries{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

从这里,您希望从文件中读取数据,并将其解析为模型对象.

SqlQueriesFromJsonModel getSqlQueries(){
    //  grab the file and parse it using json.net
    return queriesFromJson;
}
Run Code Online (Sandbox Code Playgroud)

调用方法,并使用所需的Query

// using System.Linq;
var queries = getSqlQueries();
var neededSqlQuery = queries.Where(Query => Query.Caption == "Caption 1");
Run Code Online (Sandbox Code Playgroud)

注意:已经在文本编辑器中写了这个,所以它可能不准确.如果我出错了,我会接受编辑.

现在对于实际的文档格式,这里有几个选项(您实际上不必使用其中任何一个......这只是为了让创意果汁流动).

这些都是"文本"格式.

JSON

{
    "queries": [
        {
            "caption": "Caption 1",
            "query": "select * from someTable"
        },
        {
            "caption": "Caption 2",
            "query": "select * from someOtherTable"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

XML

<?xml version="1.0"?>
<queries>
    <query caption="Caption 1">select * from someTable</query>
    <query caption="Caption 2">select * from someOtherTable</query>
</queries>
Run Code Online (Sandbox Code Playgroud)

toml

title = "SQL Queries"

[Caption 1]
query = "select * from someTable"

[Caption 2]
query = "select * from someOtherTable"
Run Code Online (Sandbox Code Playgroud)

现在已经不在了,我想写一个免责声明,从文件中读取您的查询并不是一个明智的计划.相反,编写一个存储库层来处理所有需要的查询,并考虑使用ORM使其更容易,更安全.

如果你不感兴趣的信息库和ORM的,至少写参数化查询存储过程的数据库中.

无论哪种方式,你应该完全保留文本文件.. imo