在一些数据量比较大,而且操作数据库频繁的。此时需要将数据表datatable整块的存入数据库中。
不多说,直接上代码:
首先得新建一个数据库
DataTable once_rec_date = new DataTable();
这个数据库得跟目标数据库的列的位置和大小都得一样。特别是类型,和位置。
就是列的位置和目标数据库的位置,顺序得 一模一样。因为都是块存储,所以地址什么的都得一样,千万不能少一列,自增列可以空在那边。
在初始化中初始化该表
once_rec_date.Columns.Add("id", typeof(int)); once_rec_date.Columns.Add("RevData_cmd", typeof(int)); once_rec_date.Columns.Add("Node", typeof(int)); once_rec_date.Columns.Add("Data", typeof(String)); once_rec_date.Columns.Add("Ssingle", typeof(int)); once_rec_date.Columns.Add("IsWiressData", typeof(int)); once_rec_date.Columns.Add("Datatime", typeof(DateTime)); once_rec_date.Columns.Add("Receivetime", typeof(DateTime)); once_rec_date.Columns.Add("IsMatch", typeof(int));
初始化之后,在程序中填充该datatable
DataRow newrow = once_rec_date.NewRow(); newrow["RevData_cmd"] = cmd; newrow["Node"] = Nodeid; newrow["Data"] = datastring; newrow["IsWiressData"] = IsWiress; newrow["Ssingle"] = 1; newrow["Datatime"] = datatime; newrow["Receivetime"] = time1; newrow["IsMatch"] = 3; once_rec_date.Rows.Add(newrow); return true;
再在程序结束的时候调用下面的函数AddDatatableToSQL
该函数主要实现块存储,整datatable
///-----------------------------------------------------------------* /// <summary> * /// 功 能:将数据表批量存入到数据库中 * /// 函数调用:SqlBulkCopy * /// </summary> * /// <param name="frameStruct">数据类型</param> * ///-----------------------------------------------------------------* public bool AddDatatableToSQL(DataTable ScrTable) { using (SqlConnection thisConn = new SqlConnection(ConnectionStr)) { try { if (thisConn.State == ConnectionState.Closed) { thisConn.Open(); } using (SqlBulkCopy bulkCopy = new SqlBulkCopy(thisConn)) { bulkCopy.DestinationTableName = "RevData";//这里的数据库名字可以更改,或者通过传参传进去. try { bulkCopy.WriteToServer(ScrTable); return true; } catch { return false; } finally { thisConn.Close(); } } } catch { } }//end using return false; }