MySql批量插入多条数据的一种具体实现方法
来源:互联网 发布:勇士vs雷霆第七场数据 编辑:程序博客网 时间:2024/05/29 10:48
缘起:
因为项目需要,需要在.net平台使用MySql数据库,而且需要大批量的插入数据。在SqlServer上有SqlBulkCopy这样的批量插入的方法,所以做之前就想MySql必然也有,就网上查了查相关资料,发现有是有,不过多是吉光片羽,不够统一,于是选择一种实现方法验证没问题之后,记录下来。
1.准备mysql相关驱动及dll
http://dev.mysql.com/downloads/connector/net/6.9.html
可以在这里下载ADO.NET的MySql驱动,安装完了在安装路径下应该可以找到MySql.Data.dll,这个dll后面要添加到项目引用里。
2.添加引用后,在程序里using如下:
using MySql.Data;using MySql.Data.MySqlClient;
3.实现批量插入(思路就是把所有要插入的数据组织好以后放到insert语句values后面的括号里,你懂的)
//数据库连接字符串public static string connstr = "server=localhost;uid=root;pwd=123456;database=yourdb;charset=utf8";#region 批量插入 public static void BatchInsert(DataTable dt) { if (dt.Rows.Count == 0 || dt == null) { return; } using (MySqlConnection conn = new MySqlConnection(connstr)) { MySqlCommand cmd = new MySqlCommand(); conn.Open(); cmd.Connection = conn; cmd.CommandText = GenBatchInserSql(dt); if (cmd.CommandText == string.Empty) { return; } cmd.ExecuteNonQuery(); } } //生成批量插入的sql private static string GenBatchInserSql(DataTable dt) { var names = string.Empty; var values = new StringBuilder(); var types=new List<DbType>(); var count=dt.Columns.Count; for (int i = 0; i < count; i++) { names += dt.Columns[i].ColumnName + ","; types.Add(GetDBType(dt.Columns[i].DataType)); } names = names.TrimEnd(','); var n = 0; foreach (DataRow row in dt.Rows) { if (n > 0) { values.Append(","); } values.Append("("); for (var j = 0; j < count; j++) { if (j > 0) { values.Append(","); } var isstr = IsStrType(types[j]); if (isstr) { values.AppendFormat("'{0}'", row[j]); } else { values.Append(row[j]); } } values.Append(")"); n++; } return string.Format("insert into {0} ({1}) values {2}", dt.TableName, names, values); } //判断某列是不是string类型 private static bool IsStrType(DbType dbType) { return dbType == DbType.AnsiString || dbType == DbType.AnsiStringFixedLength || dbType == DbType.String || dbType == DbType.StringFixedLength; } //根据datatype得到dbtype,将得到的结果作为参数传到上面判断某列是不是string类型的方法 private static DbType GetDBType(System.Type theType) { System.Data.SqlClient.SqlParameter p1; System.ComponentModel.TypeConverter tc; p1 = new System.Data.SqlClient.SqlParameter(); tc = System.ComponentModel.TypeDescriptor.GetConverter(p1.DbType); if (tc.CanConvertFrom(theType)) { p1.DbType = (DbType)tc.ConvertFrom(theType.Name); } else { try { p1.DbType = (DbType)tc.ConvertFrom(theType.Name); } catch (Exception) { } } return p1.DbType; } #endregion
这里我调用方法时是用datatable作为参数传递的,也可以根据需要改成别的数据结构。
版权所有,欢迎保留原文链接进行转载:)
0 0
- MySql批量插入多条数据的一种具体实现方法
- mysql 批量插入数据的方法
- mysql批量插入数据方法
- mysql批量插入数据方法
- mysql批量插入数据方法
- mysql批量插入数据方法
- MySQL使用INSERT插入多条记录, 批量新增数据
- MongoDB不支持批量插入,变相的别外一种方法实现批量插入
- mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- python向mySQL批量插入数据的方法
- openURL 不能使用iOS 10
- Java的final笔记
- 数据采集方案初探
- codeblocks 对‘cv::waitKey(int)’未定义的引用
- 10 Java并发编程1总结
- MySql批量插入多条数据的一种具体实现方法
- 使用Eclipse将Android项目打Library包
- 深度学习之卷积神经网络学习摘录(一)
- [JS]JavaScript Offset
- SwiftyJSON源码分析
- Storm与Kafka集成
- Android7.0 PowerManagerService亮灭屏分析(三)
- 打包上架错误
- linux_echo_客户端