你在哪里把SQL语句放在你的c#项目中?

前端之家收集整理的这篇文章主要介绍了你在哪里把SQL语句放在你的c#项目中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我可能会负责将vb6应用程序移植到c#。此应用程序是与访问数据库进行交互的Windows应用程序。数据访问封装在基本业务对象中。一张桌子基本上是一张桌子。现有的vb6业务对象通过DAO读写DB。之前我已经写了DAL和ORM,但是他们都只针对sql Server。这将需要目标访问和sql服务器。在以前的项目中,我将sql字符串放置在业务对象的私有部分中,也可以将冗余的sql代码移动到连接,创建命令到一个公共的基类中以减少代码

这一次,我正在考虑将sql字符串写入.settings文件或其他一些键/值类型的文本文件。然后,我将编写一个sql实用程序来编辑此文件,并允许我运行和测试参数化查询。这些查询将由业务对象中的名称引用,而不是将sql嵌入到代码中。

我知道一个标准的方法是为每个目标数据库创建一个DAL,并使配置状态使用DAL。我真的不想为每个数据库创建两个DAL类。如果我只是通过键名引用正确的查询并具有正确的连接类型,似乎会减少代码

那么,你们在做这样的事吗?你怎么会遇到这个问题?
什么最适合你?

谢谢!

解决方法

那么有很多选择 – 所以这真的取决于你最迫切需要的是:-)

一种方法可能是在VS解决方案中创建sql语句作为文本文件,并将其标记为“构建操作”中的“嵌入式资源”。这样,sql将包含在您生成的程序集中,并且可以在运行时使用.NET框架的ResourceManifestStream从其中检索:

private string LoadsqlStatement(string statementName)
{
    string sqlStatement = string.Empty;

    string namespacePart = "ConsoleApplication1";
    string resourceName = namespacePart + "." + statementName;

    using(Stream stm = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
    {
        if (stm != null)
        {
            sqlStatement = new StreamReader(stm).ReadToEnd();
        }
    }

    return sqlStatement;
}

您需要将“ConsoleApplication1”替换为sql语句文件所在的实际命名空间。您需要通过完全限定名称来引用它们。然后可以使用以下行加载sql语句:

string MysqLStatement = LoadsqlStatement("MysqLStatement.sql");

然而,这使得查询是“静态的”,例如。您不能在运行时配置和更改它们 – 它们被正确地烘烤到编译的二进制位中。但另一方面,在VS中,您可以在C#程序代码sql语句之间清理干净。

如果您需要在运行时可以调整和更改它们,我将它们放在一个单独的sql表中,其中包含例如一个关键字和实际的SQL查询作为字段。然后,您可以根据需要检索它们,然后执行它们。由于它们位于数据库表中,您还可以随意更改,修复或修改它们,即使在运行时也不需要重新部署整个应用程序。

渣子

猜你在找的MsSQL相关文章