"C#":MySql批量数量导入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了"C#":MySql批量数量导入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4969字,纯文字阅读大概需要8分钟。
内容图文
namespace TESTDATABASE 2 { 3 public enum DBStatusCode { ALL_OK, MySqlExcuteErr } 4 public class TestDB 5 { 6 private string hostIp; 7 private string dbName; 8 private string dbUser; 9 private string dbPasswd; 10 private MySqlConnection dbConn; 11 12 public TestDB() 13 { 14 this.initConn(); 15 } 16 ~TestDB() 17 { 18 dbConn.Dispose(); 19 } 20 void initConn() 21 { 22 dbName = "testDB"; 23 hostIp = "127.0.0.1"; 24 dbUser = "root"; 25 dbPasswd = "root"; 26 string connString; // Connection string。数据库连接字符串大全:http://www.connectionstrings.com/ 27 connString = "SERVER=" + hostIp + ";" + "DATABASE=" + 28 dbName + ";" + "UID=" + dbUser + ";" + "PASSWORD=" + dbPasswd + ";"; 29 dbConn = new MySqlConnection(connString); 30 } 31 // Open connection 32 public void openConn() 33 { 34 if (dbConn.State == ConnectionState.Closed) 35 dbConn.Open(); 36 } 37 // Close connection 38 public void closeConn() 39 { 40 if (dbConn.State == ConnectionState.Open) 41 dbConn.Dispose(); 42 } 43 // Insert 44 public DBStatusCode insertTest(ItermList itemList) 45 { 46 DBStatusCode flag = DBStatusCode.ALL_OK; 47 openConn(); 48 string cmdText = "insert into testTable (c1, c2, c3, c4)" 49 + "VALUES (@c1, @c2, @c3, @c4)"; 50 MySqlCommand cmd = new MySqlCommand(cmdText, dbConn); 51 try 52 { 53 foreach (Item item in itemList) 54 { 55 cmd.Parameters.Clear(); // it is needed 56 cmd.Parameters.AddWithValue("@c1", item.c1); 57 cmd.Parameters.AddWithValue("@c2", item.c2); 58 cmd.Parameters.AddWithValue("@c3", item.c3); 59 cmd.Parameters.AddWithValue("@c4", item.c4); 60 cmd.ExecuteNonQuery(); 61 } 62 } 63 catch (Exception ex) 64 { 65 flag = DBStatusCode.MySqlExcuteErr; 66 } 67 finally 68 { 69 cmd.Dispose(); 70 } 71 closeConn(); 72 return flag; 73 } 74 } 75 }上边例子涉及到对MySql数据库的数据导入。可以看出(56~60),每循环一次,就会对数据库插入一次。当数据量比较小时,可能还看不出软件的卡顿现象;当数据量很大时,整个软件可能就会卡住几分钟了。所以,我们最好是当所有数据都准备好时,再一次性向数据库定入,以减少插入次数,以最终减少数据导入时间。而且,我们还想,在数据库插入失败的情况下还能够回滚。下边是改进的函数:
1 // Insert 2 public DBStatusCode insertTest(ItermList itemList) 3 { 4 DBStatusCode flag = DBStatusCode.ALL_OK; 5 openConn(); 6 string cmdText = "insert into testTable (c1, c2, c3, c4)" 7 + "VALUES (@c1, @c2, @c3, @c4)"; 8 MySqlCommand cmd = new MySqlCommand(cmdText, dbConn); 9 MySqlTransaction tx = this.dbConn.BeginTransaction(); 10 cmd.Transaction = tx; 11 try 12 { 13 foreach (Item item in itemList) 14 { 15 cmd.Parameters.Clear(); // it is needed 16 cmd.Parameters.AddWithValue("@c1", item.c1); 17 cmd.Parameters.AddWithValue("@c2", item.c2); 18 cmd.Parameters.AddWithValue("@c3", item.c3); 19 cmd.Parameters.AddWithValue("@c4", item.c4); 20 cmd.ExecuteNonQuery(); 21 } 22 tx.Commit(); 23 } 24 catch (Exception ex) 25 { 26 flag = DBStatusCode.MySqlExcuteErr; 27 tx.Rollback(); 28 } 29 finally 30 { 31 cmd.Dispose(); 32 } 33 closeConn(); 34 return flag; 35 }
这里的改进可以说还只是初步的。当数据特别大时,这种方法就会出问题了。因为计算机要一次性把非常多的数据插入到数据库,有可能因为内存不足等原因而导致最终导入时间过长等。所以,在有一些情况下,我们还得分批提交(tx.Commit()),例如每1000个数据提交一次,这样就能够大大减轻计算机和数据库负担了。
关于MySql事务介绍资料:
MySQL 事务
说说MySQL中的事务
关于批量插入数据,可参考的资源还有:
MySQL大量数据插入各种方法性能分析与比较
在C#中完成海量数据的批量插入和更新
[C#][SQL SERVER] 提高 Insert 效能
.NET 批量插入数据,DataSet, SqlDataAdapter.Update
datatable 使用SqlDataAdapter.Update批量插入更新数据
"C#":MySql批量数量导入
标签:
本文系统来源:http://www.cnblogs.com/xiehongfeng100/p/4503830.html
内容总结
以上是互联网集市为您收集整理的"C#":MySql批量数量导入全部内容,希望文章能够帮你解决"C#":MySql批量数量导入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。