2010-05-12 67 views

回答

3

您可以使用一个SQL语句,像这样插入多行:

INSERT INTO myTable (col1, col2, col3) VALUES ('myval1', 'myval2', 'myval3'), ('myotherval1', 'myotherval2', 'myotherval3'), ('anotherval1', 'anotherval2', 'anotherval3'); 

更新:

MarkR是正确的,他的评论 - 如果你收集用户数据,或者你正在编译的信息,你可以像动态构建查询:

StringBuilder stringBuilder = new StringBuilder(); 
stringBuilder.Append("INSERT INTO myTable (col1, col2, col3) VALUES "); 
for(int i=0;i<myDataCollection.Count;i++) { 
    stringBuilder.Append("(" + myDataCollection[i].Col1 + ", " + myDataCollection[i].Col2 + ", " + myDataCollection[i].Col3 + ")"); 
    if (i<myDataCollection.Count-1) { 
    stringBuilder.Append(", "); 
    } else { 
    stringBuilder.Append(";"); 
    } 
} 

string insertStatement = stringBuilder.ToString(); 

两个要点需要注意:

  1. 如果你接受来自用户的输入,这是非常重要消毒所有的用户输入,否则,恶意用户可能会修改/删除/降你的整个数据库。有关更多信息,请参阅Google“SQL注入”。
  2. 我正在使用StringBuilder类,而不是使用字符串原语并简单地追加(即string s =“Insert ...”; s + =“blah blah blah”),因为它的StringBuilder在追加时更快,因为它不被视为数组,因此不需要在追加到它时调整自己的大小。
+0

多数民众赞成好...我从我的aspx页面传递价值..我没有直接给出值... – TinTin 2010-05-12 19:20:59

+0

您可以建立查询编程最大数据包大小(在服务器上配置) – MarkR 2010-05-12 19:29:40

+0

MarkR是正确的 - 请参阅我的更新了解更多信息... – AlishahNovin 2010-05-12 20:39:52

1

可以使用LOAD DATA INFILE(或LOAD DATA LOCAL INFILE)将行从现有文件批量加载到表中。

对于LOAD DATA LOCAL,文件从客户端传输到服务器并作为大批量插入。这不受最大数据包大小(如INSERT)的限制,但它仍然受限于可以在innodb中回滚的最大事务 - 它全部在一个事务中执行,所以如果它太大,它将超出回滚空间,并且无论如何,如果回滚一个非常大的事务,则需要很长时间并影响服务器。

正常情况下,作为单个插入或加载数据加载超过几个(可能为数十个,可能数百个)兆字节的数据是不可取的。如果你有更多,你可以分解它。

相关问题