在程序中避免使用SQL语句是个好主意吗?

在程序中避免使用SQL语句是个好主意吗?,sql,Sql,我最近遇到了一个程序,它是使用表中的sql语句开发的,每个语句都有一个代码。而不是在程序本身中使用特定的sql语句 因此,与其使用这样的代码: string query = "SELECT id, name from [Users]"; cmd.ExecuteQuery(query); 他们使用的代码如下:(简化) 据我所知,这背后的逻辑是,它使程序更易于维护,因为开发人员可以自由更改“用户sql”,而无需实际更改程序 然而,这让我觉得可能有点适得其反。这种代码会被认为是一个好主意吗 编辑:我

我最近遇到了一个程序,它是使用表中的sql语句开发的,每个语句都有一个代码。而不是在程序本身中使用特定的sql语句

因此,与其使用这样的代码:

string query = "SELECT id, name from [Users]";
cmd.ExecuteQuery(query);
他们使用的代码如下:(简化)

据我所知,这背后的逻辑是,它使程序更易于维护,因为开发人员可以自由更改“用户sql”,而无需实际更改程序

然而,这让我觉得可能有点适得其反。这种代码会被认为是一个好主意吗


编辑:我不是在寻找像“使用ORM”这样的建议。假设sql查询是唯一的选择。

在我看来,这种方法是荒谬的。将尽可能多的SQL与中间层分离是有价值的(可维护性、模块性),但为了实现这一目的,我建议使用存储过程。

在我看来,这种方法是荒谬的。将尽可能多的SQL与中间层分离是有价值的(可维护性、模块性),但为了实现这一目的,我建议使用存储过程。

不,我真的不认为进一步设计是个好主意

作为一个测试或学习活动是不同的一部分,但向前推进这样的实施是绝对不可取的

优点:

一,。我们得到了完全的模块化。真实的业务模式可以随时更改,并且我们不需要修改正在运行的应用程序来从不同的模式获得结果(考虑到结果格式不会更改)

缺点。
1.在这个实现中,每当我们想要执行1时,我们都会向数据库触发2个SQL。包括DB调用在内的I/O调用始终执行ACE hit,通过此实现,我们将性能提高一倍,这显然是不可取的

不,我真的不认为继续设计是个好主意

作为一个测试或学习活动是不同的一部分,但向前推进这样的实施是绝对不可取的

优点:

一,。我们得到了完全的模块化。真实的业务模式可以随时更改,并且我们不需要修改正在运行的应用程序来从不同的模式获得结果(考虑到结果格式不会更改)

缺点。
1.在这个实现中,每当我们想要执行1时,我们都会向数据库触发2个SQL。包括DB调用在内的I/O调用始终执行ACE hit,通过此实现,我们将性能提高一倍,这显然是不可取的

更适合IMO@FreshPrinceOfSO-所讨论的SQL查询实际上存储在一个表中;第一个查询检索查询,第二个查询执行它。讨厌。当然希望查询不需要参数……这不能表示为“避免SQL查询”。“加倍SQL查询”可能是一个更好的术语,我不认为这种方式是一个好主意,原因有很多:可读性,破坏部署过程,破坏代码的“生命周期”(完全相同的代码可能会有非常不同的结果,因为查询在数据库中,而不是在代码中),…我当然希望插入、更新,删除和任何需要参数的查询也不是这样处理的——或者它们是否使用了正确的绑定变量?我宁愿使用视图或存储过程。更适合IMO@FreshPrinceOfSO-所讨论的SQL查询实际上存储在一个表中;第一个查询检索查询,第二个查询执行它。讨厌。当然希望查询不需要参数……这不能表示为“避免SQL查询”。“加倍SQL查询”可能是一个更好的术语,我不认为这种方式是一个好主意,原因有很多:可读性,破坏部署过程,破坏代码的“生命周期”(完全相同的代码可能会有非常不同的结果,因为查询在数据库中,而不是在代码中),…我当然希望插入、更新,删除和任何需要参数的查询也不是这样处理的——或者它们是否使用了正确的绑定变量?我宁愿使用视图或存储过程。1使用视图或存储过程更容易实现。1使用视图或存储过程更容易实现。
string firstQuery = "SELECT queryText from [Queries] where queryCode = 'SELECT_ALL_USERS'";
string userQuery = cmd.ExecuteQuery(firstQuery);//pretend this directly returns the result of the first query

cmd.ExecuteQuery(userQuery);