C# 如何在一次数据库点击中将多个插入或更新推送到一起-对于多数据库(SQL Server、Oracle、MySQL和PostgreSQL)应用程序

C# 如何在一次数据库点击中将多个插入或更新推送到一起-对于多数据库(SQL Server、Oracle、MySQL和PostgreSQL)应用程序,c#,sql,database,sql-injection,database-performance,C#,Sql,Database,Sql Injection,Database Performance,目前,我正在尝试为我们的项目开发一个数据层库,它支持多个数据库SQL Server、Oracle、MySQL和PostgreSQL。数据库服务器通常会托管在公共云中。从windows窗体客户端和web服务器执行数据访问选择、插入、更新和删除。winforms客户端迫使我以这样一种方式来设计东西,即尽量减少数据库往返 我的问题是“如何在一次db命中中将多个插入或更新推到一起” 我在谷歌上做了很多研究,知道参数化插入/更新是记住SQL注入攻击的方法。但它不适合我,因为我不想多次往返db BulkCo

目前,我正在尝试为我们的项目开发一个数据层库,它支持多个数据库SQL Server、Oracle、MySQL和PostgreSQL。数据库服务器通常会托管在公共云中。从windows窗体客户端和web服务器执行数据访问选择、插入、更新和删除。winforms客户端迫使我以这样一种方式来设计东西,即尽量减少数据库往返

我的问题是“如何在一次db命中中将多个插入或更新推到一起”

我在谷歌上做了很多研究,知道参数化插入/更新是记住SQL注入攻击的方法。但它不适合我,因为我不想多次往返db

BulkCopy是特定于SQL Server的,主要用于插入

存储过程/XML—我有不同的数据库,这使得维护每个存储过程都很困难。而且表的数量也不是静态的,新表可以随时引入,现有表也可以随时更改,因为应用程序本质上是动态的

在这一点上,对我来说最好的选择是使用StringBuilder解析sql字符串,并一次性启动查询。我查看了owasp esapi dotnet库,但没有实现防止sql注入的sql编码。此外,该项目现在看起来已经死了,上一次提交是在2010年12月

是否有任何开源实现负责多个数据库(至少是SQL Server、Oracle、MySQL和PostgreSQL)的SQL注入

有没有其他方法可以在一次db往返中实现多个插入/更新的目标

我正在.NET4上使用C


编辑:我们正在尝试将其作为一种产品推出,客户将有机会选择他/她想要的DB供应商。

如果这是我的问题,我会在sql server上设置链接服务器。然后我会编写存储过程,从应用程序中接受必要的参数并对其进行处理。

@a_horse_with_no_name:对不起,忘了提到我正在使用C.NET。看起来您已经检查并放弃了此问题的常见解决方案,即应用程序服务器、存储过程、,或者仅限于一家DB供应商。我认为您必须决定在应用程序端运行您自己的解决方案(可以解释SQL注入本身)是否比使用存储过程维护代码复杂得多或少。我隐约记得SqlClient的CommandText中有多条语句出现问题,但是我记起来太久了。@BaconBits:我们正试图将其作为一种产品推出,客户将有机会选择他想要的DB供应商。您可以通过将所有记录操作移动到数据库上的服务来实现这一点。构建一个文件并加载它,例如大多数DBMS都有一个版本。不过,在任何批量更新/插入时,您需要回答的一个大问题是对账。我理解这一点。我的观点是,你已经放弃了我知道的常见解决方案。所以无论你做什么,你都必须自己编写代码。编码和维护在客户端上处理但更容易被注入的东西会更容易吗?还是在服务器上编码和维护更难编码和维护的存储过程会更容易?我看不出链接服务器如何帮助在一个查询中推送多个更新。尤其是与甲骨文或Postgres@a_horse_with_no_name我想他当时的印象是,DB将是跨多个DB平台的一个应用程序实例,而不是在任何可能的DB平台上都有多个实例。在任何可能的DB平台上都有多个实例-这是正确的。@BaconBits:ah。我认为它应该是一个独立于DBMS的解决方案,使用尽可能少的语句在单个DBMS中存储行。