Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用几个存储过程将大量数据添加到数据库中_C#_Mysql - Fatal编程技术网

C# 使用几个存储过程将大量数据添加到数据库中

C# 使用几个存储过程将大量数据添加到数据库中,c#,mysql,C#,Mysql,我有3个存储过程AddProduct、AddProductProperties和AddOffer。 我需要使用以下过程从数据库中的各种数据源导入数据。数据源的结构是可变的,所以它可能只包含产品或服务,或者两者都包含。 我的算法是从数据源读取记录,然后调用必要的过程。 为了调用过程,我使用带有参数的MySqlCommand 问题: 打电话最快的方式是什么 这样的程序? 我是否需要存储3个MySqlCommand对象并仅更改参数 还是没关系? 如何缓存跟踪日志中记录的每次调用的这些调用 检索元数据的

我有3个存储过程AddProduct、AddProductProperties和AddOffer。 我需要使用以下过程从数据库中的各种数据源导入数据。数据源的结构是可变的,所以它可能只包含产品或服务,或者两者都包含。 我的算法是从数据源读取记录,然后调用必要的过程。 为了调用过程,我使用带有参数的MySqlCommand

问题:

打电话最快的方式是什么 这样的程序? 我是否需要存储3个MySqlCommand对象并仅更改参数 还是没关系? 如何缓存跟踪日志中记录的每次调用的这些调用 检索元数据的过程 程序重命名? 两项建议:

在MySqlCommand上使用Prepare方法

MySqlCommand类有一个Prepare方法。如果必须重复调用这些存储过程,那么我将使用它来尽量减少每次执行所需的工作量。以下是我认为将涉及的大致步骤:

为每个存储过程设置一个命令对象,包括任何必要的参数

打开与数据库的连接

为每个命令调用一次Prepare方法

迭代你的数据

4.1。根据数据更新命令参数的值

4.2。在命令的

不过,我不确定您将从中真正获得多少性能优势

如果您执行的是特殊语句,而不是过程,或者甚至是过程,那么我认为需要注意的一点是使用参数,而不是简单地将值连接到命令文本中。如果要使用字符串连接方法(我认为这在大多数情况下通常是个坏主意),那么可能无法利用Prepare方法,因为每次执行都必须修改命令

是否有BulkInsert/BulkCopy选项可用

我对MySQL的熟悉程度不如SQL Server;Net具有大容量复制功能,可用于将大量数据插入SQL Server。我不知道MySQL是否提供了类似的功能,但是如果它有很多数据要插入,那么就考虑使用它来代替重复调用存储过程。 插入的速度和单个调用就像油和水一样。哦,这不是一个好的说法

策略。。。 将各种数据源导入与其布局匹配的临时表中。使用db的内置导入实用程序导入附加到其他数据库或odbc等的平面文件或表格-如果可以使外部数据源显示为附加表格,则可以跳过临时表格部分 使用诸如INSERT INTO ADDDPRODUCT之类的语句。。。选择从TempProducts1或链接表中,将立即放入所有记录 如果必须从多个输入格式管理同一dest表中的冲突,仍然可以从sql批量查询中进行管理。 那么你必须使用临时表 如果temp1胜过temp2,则在导入之前使用simliar。 Delete from temp2 where temp2.id in (select id from temp1) 您可以通过更新表的联接、检查左侧PK字段中是否存在空值的左侧外部联接来执行类似操作,等等。 放下临时表格。不要抱怨临时桌!我打赌你不是多用户。我打赌你是DBA。极限速度=极限测量。 有一次,我甚至改变了这样的方式,文件中的冲突项必须覆盖以前的项,使用builk update/insert/delete查询和临时表,从一个外部平面文件。使用了5条以上的丑陋的sql语句。这并不有趣,但比同一个盒子上的代码插入速度快100倍左右。这类似于单个SP执行插入操作,可能没那么糟糕,它是vb4和access jet2.0:-。但是,由于往返等原因,联网客户端的性能会更差


您还可以使用多记录SQL更新来治疗癌症。

如果我调用“准备三个步骤”,这三个步骤都会生效,或者只适用于最后一个步骤?如果您有前后计时,我很想知道它们是什么;-如果你有时间,请发表评论。谢谢