概述
无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。很通俗易懂,重点是还非常风趣幽默,像看小说一样。网址是https://blog.csdn.net/jiangjunshow/article/details/77338485
缘起:
因为项目需要,需要在.net平台使用MySql数据库,而且需要大批量的插入数据。在SqlServer上有SqlBulkCopy这样的批量插入的方法,所以做之前就想MySql必然也有,就网上查了查相关资料,发现有是有,不过多是吉光片羽,不够统一,于是选择一种实现方法验证没问题之后,记录下来。
1.准备mysql相关驱动及dll
MySQL :: Download Connector/NET
可以在这里下载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作为参数传递的,也可以根据需要改成别的数据结构。
版权所有,欢迎保留原文链接进行转载:)
最后
以上就是缥缈纸鹤为你收集整理的MySql批量插入多条数据的一种具体实现方法的全部内容,希望文章能够帮你解决MySql批量插入多条数据的一种具体实现方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复