Tôi không biết nếu đây là phương pháp tốt với tham số, nhưng nó hoạt động tốt Phương thức nhận danh sách "ParamDbList" (Bộ sưu tập ParamDB) và chèn hàng 1000 đăng ký hoặc 1900 tham số (giới hạn 2000). Chỉ cần thích ứng này cho ổ
public bool InsertBatch(System.Collections.Generic.List<ParamDbLIST> dados, string tabela)
{
if (dados.Count == 0)
return true;
string campos = "";
dados[0].ForEach(delegate(ParamDB p)
{
campos += (campos == "" ? "" : ", ") + "@" + p.sNOME + "#N#";
});
bool resultado = true;
//Insere de 999 a 999, que é o máximo q o sql server permite por vez
//Maximo de 2000 parametros
int k = 0;
while (k < dados.Count)
{
this.sql = new StringBuilder();
List<String> vals = new List<string>();
ParamDbLIST parametros_insert = new ParamDbLIST();
int c_sqls = 0;
int c_parametros = 0;
while (k < dados.Count && c_sqls < 1000 && c_parametros < 1900)
{
c_sqls++;
vals.Add("(" + campos.Replace("#N#", c_sqls.ToString()) + ")");
foreach (ParamDB p in dados[k])
{
p.sNOME += c_sqls.ToString();
parametros_insert.Add(p);
c_parametros++;
}
k++;
}
this.sql.Append("INSERT INTO " + tabela + "(" + campos.Replace("#N#", String.Empty).Replace("@", String.Empty) + ") VALUES " + String.Join(",", vals));
resultado = resultado && this.RunSQL(sql.ToString(), parametros_insert);
}
return resultado;
}
public class ParamDbLIST : System.Collections.ObjectModel.Collection<ParamDB>
{/*I have other stuff here, but this will work*/}
public class ParamDB
{
public string sNOME { get; set; }
public Object sVALOR { get; set; }}
của bạn Hãy nhớ rằng các phương pháp INSERT INTO tbl_name (a, b, c) GIÁ TRỊ (1,2,3), (4,5,6), (7,8,9); có giới hạn 1000 hàng cho mỗi lệnh.
Tôi nghĩ rằng một điều tốt để làm ở đây sẽ được sử dụng giao dịch (đối với an toàn)
Phương pháp bạn nên thay đổi được RunSQL
Nếu phương pháp này có thể được tối ưu hóa, xin vui lòng cho tôi biết
Nguồn
2015-11-03 11:53:18
Liệu là giúp đỡ để bắt đầu một giao dịch bằng tay, trước khi cập nhật? – Jens
@Thomas - Chèn hàng loạt chỉ có vẻ như có thể với một tệp bên ngoài trong MySQL mặc dù, đúng không? –