将新行插入SQL数据库


inserting new rows into SQL database

我需要使用c#和php添加新记录到我的SQL数据库。我使用以下代码:

string server = "http://www.naseelco.com/scorm/populatecode.php";
foreach (string code in codeList)//codelist has 200 items
 {
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(server);
     request.Method = "POST";
     string postData = "Code=" + code + "&Active=false";
     byte[] byteArray = Encoding.UTF8.GetBytes(postData);
     request.ContentType = "application/x-www-form-urlencoded";
     request.ContentLength = byteArray.Length;
     try
     {
         Stream dataStream = request.GetRequestStream();
         dataStream.Write(byteArray, 0, byteArray.Length);
         dataStream.Close();
     }
     catch
     {
     }
}

是populatcode .php文件的内容:

<?php 
$Code = $_POST['Code'];
$Active = $_POST['Active'];
mysql_connect("localhost","myUserName","myPassword") or die ('Error updating database');
mysql_select_db("naseelc1_AC");
mysql_query("INSERT INTO codes (code,Active)VALUES ('$Code','$Active')");
echo $Code;
?>

但是这段代码需要太多时间来更新SQL数据库。我的问题是:
是否有更有效的方法来插入多个记录在SQL数据库?

分析性能问题的第一件事是测试验证哪里浪费了时间,而不是假设是系统的一个特殊部分。

你说"更新SQL数据库要花太多时间",你怎么知道是insert拖慢了你的速度?

首先,您必须度量系统每个部分的运行时间。然后优化这部分。

如果你不知道要优化哪一部分,就不要开始优化。

使用分析器或简单的时间测量代码,使用PHP中的microtime()和c#中的Stopwatch类来计算程序中某个部分的运行时间,以确定热点。

假设您已经完成了所有这些,但仍然发现' INSERTìng单行花费的时间太长,那么还有几个领域需要探索。索引太多可能是首先要检查的。

看到您的程序,我敢打赌Anders Abel是对的,您是在HTTP开销上浪费时间,而不是在insert

期间。

另一种方法是将整个列表发送到PHP代码,然后使用多行INSERT插入所有内容,只需一条语句:

  INSERT INTO codes (code,Active)
  VALUES 
  ('code_1', true),
  ('code_2', false),
  ('code_3', true),
  ('code_4', false),
  ('code_5', true)

但我仍然相信这是你的概念发送每个代码作为一个POST到后端,这是采取所有的时间…

200个后续web请求的延迟可能是导致性能下降的原因。两个建议:

  • 修改php代码以接受完整的列表并遍历它。
  • 在c#代码中使用Parallel.Foreach来并行运行请求。

我知道您没有明确询问安全性,但是ESCAPE YOUR USER FIELDS!你应该永远不要在你的查询中直接使用$_GET$_POST变量。必须先转义它们。您当前的代码很容易被利用。您可以使用mysql_real_escape_string()

转义每个字段

见:http://php.net/manual/en/function.mysql-real-escape-string.php

无论如何,要真正回答你的问题,你可能想看看MySQL连接器/NET。它是一个库,直接连接到MySQL服务器,并与标准System.Data类集成。