17回答

0收藏

您将SQL语句放在c#项目在哪里?

技术问答 技术问答 488 人阅读 | 17 人回复 | 2022-03-03

我可能负责将军vb6移植应用程序c#。该应用程序是与访问数据库交互的Windows应用程序。数据访问包装在基本业务对象中。基本上是一桌一桌。vb6业务对象通过DAO读写数据库。我以前写过几次。DAL和ORM,但都只针对SQL
' E8 q/ {5 [& b$ L0 _3 BServer。这将需要目标访问和sql
0 U7 Q/ Z. D0 g9 p4 T/ G; w6 j: wserver。在以前的项目中,我会SQL将字符串放在业务对象的私有部分,并可能将多余的字符串放入业务对象的私有部分sql为了减少代码,代码(如连接、创建命令)移动到一个通用基类。
. D5 O: v) L2 `+ |这一次,我正在考虑将军SQL字符串写入.settings文件或其他类型的键/值文件。然后,我会写一个sql编辑本文件并允许我操作和测试参数查询的实用程序。这些查询将在业务对象中引用名称,而不是sql嵌入代码。" A# _$ u5 U! ]$ o9 G
我知道为每个目标数据库创建一个标准的方法DAL,并且有使用的东西DAL配置状态。我真的不想为每个数据库创建两个DAL类别。如果我只引用正确的查询和正确的连接类型,代码似乎会更少。- S! T  n9 F0 {' Q
你在做这样的事吗?您将如何解决这个问题?最适合你的是什么?
$ U( n/ b" `3 W1 K" Q谢谢!/ b: a4 H2 C$ Q
                                                               
$ D; U! A! n8 ^$ s. r    解决方案:                                                                8 v) @1 O- C: b3 x( P. Y0 ^  x. A
                                                                好吧,这里有很多选择-因此,这实际上取决于你最紧迫的需求:-)
# b% Q, a+ M8 b+ Z2 O可能有一种方法VS在解决方案中SQL将句子创建成文本文件,然后在构建操作中标记为嵌入式资源。SQL它将被集中在结果程序中,并且可以使用.NET框架的ResourceManifestStream在运行过程中从中检索SQL:1 r/ u) E: K2 q- E. n) a
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;}您需要用sql语句文件所在的实际名称空间替换% F& l* c  T6 {% M% ~# M
ConsoleApplication1。您需要使用完全有限的名称来引用它们。然后,您可以使用以下行程来加载您SQL语句:% J! Y6 G) j3 D+ R5 V3 v
string mySQLStatement = LoadSQLStatement("MySQLStatement.sql");但是,这会使查询变得静态-3 `6 r2 f8 j! p# x
它们直接烘烤到已编译的二进制位。但另一方面,在VS中,您的C#程序代码和SQL句子之间有很好的清晰分离。
( O: e3 X; s4 n, P如果在运行过程中需要调整和更改,可以单独放置SQL在表中,表包含关键字和实际关键字SQL查询作为字段。然后,您可以根据需要搜索它们并执行它们。由于它们位于数据库表中,您甚至可以在不重新部署整个应用程序的情况下更改、修复或修改它们。
8 E# A" P7 W, t  w# E3 c' V马克
分享到:
回复

使用道具 举报

回答|共 17 个

浪奇天下

发表于 2022-3-3 22:39:42 | 显示全部楼层

佩服佩服!
回复

使用道具 举报

冷风逍遥

发表于 2022-3-5 12:50:20 | 显示全部楼层

纯粹路过,没任何兴趣,仅仅是看在老用户份上回复一下
回复

使用道具 举报

沙漠英雄

发表于 2022-3-6 14:10:20 | 显示全部楼层

我也是坐沙发的
回复

使用道具 举报

枫林清溪

发表于 2022-3-7 08:42:12 | 显示全部楼层

小白一个 顶一下
回复

使用道具 举报

就是这么回事

发表于 2022-3-8 04:28:04 | 显示全部楼层

看帖要回,回帖才健康,在踩踩,楼主辛苦了!
回复

使用道具 举报

伟记

发表于 2022-3-8 15:36:57 | 显示全部楼层

顶起出售广告位
回复

使用道具 举报

健美猪

发表于 2022-3-8 23:15:20 | 显示全部楼层

我也是坐沙发的
回复

使用道具 举报

吃鱼会变丑

发表于 2022-3-9 05:01:09 | 显示全部楼层

求沙发
回复

使用道具 举报

向前出发

发表于 2022-3-9 10:25:28 | 显示全部楼层

在撸一遍。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

29055 积分
9659 主题
热门推荐