你的c#项目中的SQL语句放在什么位置?我可能负责将vb6应用程序移植到c#。此应用程序是一个与访问数据库交互的Windows应用程序。数据访问封装在基本业务对象中。基本上是一桌一班。现有的vb6业务对象通过DAO读写DB。我以前写过几次DAL和ORM,但它们都是特定于SQLServer的。这将需要TargetAccess和SQLServer。在以前的项目中,我会将SQL字符串放在业务对象的私有部分,并可能将多余的sql代码(如连接、创建命令)移动到一个公共基类中以减少代码。这一次,我正在考虑将SQL字符串写入.settings文件或其他键/值类型的文本文件。然后我会编写一个sql实用程序来编辑这个文件并允许我运行和测试参数化查询。这些查询将在业务对象中按名称引用,而不是将sql嵌入到代码中。我知道一种标准方法是为每个目标数据库创建一个DAL,并使用DAL配置状态。我真的不想为每个数据库创建两个DAL类。如果我只是通过键名引用正确的查询并具有正确的连接类型,那么代码似乎会更少。那么,你这样做吗?你是如何解决这个问题的?什么最适合你?谢谢!好吧,有很多选择——所以这真的取决于你最紧迫的需求是什么:-)一种方法可能是在VS解决方案中将SQL语句创建为文本文件,并在“构建操作”中将它们标记为“嵌入式资源””。这样,SQL就包含在生成的程序集中,并且可以在运行时使用.NET框架的ResourceManifestStream从中检索:stringnamespacePart="ConsoleApplication1";stringresourceName=namespacePart+"."+语句名称;using(Streamstm=Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)){if(stm!=null){sqlStatement=newStreamReader(stm).ReadToEnd();}}返回sqlStatement;需要将“ConsoleApplication1”替换为sql语句文件所在的实际命名空间。您需要通过完全限定名称来引用它们。然后您可以使用以下行加载SQL语句:stringmySQLStatement=LoadSQLStatement("MySQLStatement.sql");然而,这使得查询相当“静态”,即您无法在运行时配置和更改它们——它们被直接编译为已编译的二进制文件。但另一方面,在VS中,你可以实现C#程序代码和SQL语句的干净分离。如果您需要能够在运行时调整和更改它们,我会将它们放入一个SQL表中,该表包含例如关键字和作为字段的实际SQL查询。然后您可以检索它们并根据需要执行它们。由于它们存在于数据库表中,因此您还可以随意更改、修复和修改它们-即使是在运行时-而无需重新部署整个应用程序。Scum当我真的需要它时,我将查询放入单独的*.sql文件中,然后将它们包含在Resources.resx中。有一个“文件”部分,允许您包含嵌入式资源文件。之后,我可以使用生成的Resources.MyQuery属性来保证资源的存在,而无需编写自定义资源加载方法。LINQtoDataSet听起来很像您的方式。如果您之前没有使用过.NET3.5/LINQ,那么您可以大饱眼福了。LINQ将节省您在字符串文字中编写原始sql的时间,并为您提供一种更明智的创建查询的方式。无论如何,检查此链接以在Access数据库上使用LINQ-http://msdn.microsoft.com/en-us/library/bb386977.aspx我会告诉我不会把它放在哪里,我在继承在代码中看到的东西。它在Java中,但适用于任何语言,我不会解释为什么我不会:-)我们使用的一种方法是有一个连接到数据库的类和一个调用过程的方法,并在方法参数中提供过程名称。所以所有的SQL代码都在程序中。我们将为不同的返回类型使用重载类ConnectToSQL(){//connectSql代码(我假设从设置文件中读取)XMLDataDocumentrunProcedure(stringprocedureName);intrunProcedure(字符串过程名称);//etc....}如果我必须为SQL和Access创建应用程序,我将使用一些IDAL接口、具有通用函数实现的DALCommon以及从DALCommon继承的独立DALSql和DALAccess,以及一些特定的东西,如异常、事务处理、安全等。我曾经在资源文件中保存存储过程名称或查询。有时,对于自定义报告应用程序,您确实需要接受阻抗不匹配并特别强调SQL。在这些情况下,我建议如下:对于包含SQL字符串的每个模块,创建一个静态“SQL”类来保存它们。某些SQL字符串可能需要参数,因此请保持一致并将每个字符串放在其自己的静态方法之后。我只是偶尔为自定义报告应用程序这样做,但它总是很好用,让人感觉耳目一新和自由自在。很高兴几个月后回来进行增强并在一个SQL.cs文件中找到所有等待您的SQL。只需读取一个文件,它就会全部返回,而这通常是唯一需要更改的文件。在这些情况下,我认为没有必要在资源或其他方面隐藏SQL。当SQL很重要时,它就很重要。有趣的是,越来越多的开发人员现在自由地将SQL与C#混合使用,包括我相信这个站点,因为从本质上讲,这就是LINQ。最后,一如既往,确保您不会受到SQL注入攻击。特别是如果涉及用户输入,请确保使用某种参数化并且不要使用字符串连接。如果SQL查询有“where”原因,上面显示的嵌入式解决方案可能无法工作,但对于相同的查询,下一次运行需要PropertyID='113'因为读入了PropertyID。很高兴你问了!将您的SQL放入QueryFirst.sql模板中。它会作为嵌入式资源自动编译到您的应用程序中,但您并不关心。您只需在一个真正的SQL窗口中编写它,连接到您的数据库,对表和列使用语法验证和智能感知,然后通过生成的Execute()方法使用它,以及智能感知输入和结果。免责声明:我写了QueryFirst。以上就是C#学习教程:你的c#工程中,SQL语句放在什么位置?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
