1. 程式人生 > >C#使用SqlBulkCopy批量更新資料

C#使用SqlBulkCopy批量更新資料

相關連結:

http://blog.csdn.net/codetian/article/details/2948679

http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.datatype(v=vs.100).aspx

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/b1dc9091-f6c7-4d36-a937-f2ddcab3de78/sqlbulkcopy-error-the-given-value-of-type-sqldecimal-from-the-data-source-cannot-be-converted-to

例子:

SqlConnection sqlCon = new SqlConnection(sqlConStr);sqlCon.Open();SqlTransaction sqlTran = sqlCon.BeginTransaction(); // 開始事務
SqlBulkCopy sqlBC = new SqlBulkCopy(sqlCon, SqlBulkCopyOptions.Default, sqlTran);sqlBC.DestinationTableName = "SaleInfo";sqlBC.BatchSize = 1;DataTable dtSale = new DataTable();

dtSale.Columns.Add("SaleID", typeof(Int32));dtSale.Columns.Add("SaleDate",typeof(DateTime));dtSale.Columns.Add("SaleDep");dtSale.Columns.Add("Operator");dtSale.Columns.Add("CusID", typeof(Int32));dtSale.Columns.Add("SaleServerTime");DataRow sqlRow = dtSale.NewRow();sqlRow["SaleID"] = 700;sqlRow["SaleDate"] = DateTime.Today;
sqlRow["SaleDep"] = "管理部";sqlRow["Operator"] = "system";sqlRow["CusID"] = 780;sqlRow["SaleServerTime"] = "";dtSale.Rows.Add(sqlRow);try{sqlBC.WriteToServer(dtSale); //此處報錯sqlTran.Commit();}catch (Exception){sqlTran.Rollback();throw;}finally{sqlBC.Close();sqlCon.Close();}Close();報錯內容:來自資料來源的 String 型別的給定值不能轉換為指定目標列的型別 smalldatetime。表結構說明:CREATE TABLE [SaleInfo] ([SaleID] [int] NOT NULL ,[HWSaleID] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,[SaleDate] [smalldatetime] NULL ,[SaleDep] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,[Operator] [varchar] (12) COLLATE Chinese_PRC_CI_AS NULL ,[CusID] [int] NULL ,[ReturnMoney] [real] NULL ,[SaleServerTime] [varchar] (9) COLLATE Chinese_PRC_CI_AS NULL ,CONSTRAINT [PK_SaleInfo] PRIMARY KEY  CLUSTERED ([SaleID])  ON [PRIMARY] ) ON [PRIMARY]

解答:

查看錶結構後發現C#程式碼中Columns中少了[HWSaleID] 和[ReturnMoney] (程式中沒用到),資料庫中刪除了這2列後程序正常了。

結論:SqlBulkCopy 提交資料不同於Insert語句,DataTable.Columns必須與資料庫中的列完全匹配(包括列數量及資料型別).

相關推薦

C#使用SqlBulkCopy批量更新資料

相關連結: http://blog.csdn.net/codetian/article/details/2948679 http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.datatype(v=

SqlBulkCopy批量更新數據庫表用例

conn batch map nsa 更新數據 efault copy mapping using using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(da.Connection as SqlConnection, SqlBu

SQL之merge into 批量更新資料

    轉載:http://www.cnblogs.com/ruiati/archive/2013/01/18/2866017.html Merge關鍵字是一個神奇的DML關鍵字。它在SQL Server 2008被引入,它能將Insert,Update,Dele

SQL之merge into 批量更新資料 Merge關鍵字是一個神奇的DML關鍵字。它在SQL Server 2008被引入,它能將Insert,Update,Delete簡單的併為一句。M

轉載http://www.cnblogs.com/ruiati/archive/2013/01/18/2866017.html     Merge關鍵字是一個神奇的DML關鍵字。它在SQL Server 2008被引入,它能將Insert,Up

5.03-mysql批量更新資料的異常

來回測了幾次,複製sql到資料庫執行也沒錯。 導致的原因是:配置資料庫連線時url沒有配置allowMultiQueries=true屬性。 allowMultiQueries:允許多查詢. jdbc:mysql://localhost:3306/database?characte

Java中利用QueryRunner批量更新資料

程式碼如下: package com.accord.test; import java.sql.Connection; import java.sql.PreparedStatement; import java.text.SimpleDateFormat; impo

mysql和Mapper中批量更新資料寫法

mapper寫法: <update id="updateOrderStateByOrderId" parameterType="java.util.List"> update t_replace_order set Forder_state = <f

oracle批量更新資料

#pub_entry變更entryname標識 DECLARE CURSOR entry_cur IS SELECT entryid,entryname FROM pub_entry FOR UPDATE; entry_row entry_cur%ROWTYPE; BEGIN OPEN en

SqlDataAdapter.update結合事務(SqlTransaction)批量更新資料

 //此處的程式功能主要是將一個庫中的表資料(源表)更新到另外一個庫中的表資料(目標表) //實現目標表的資料和源表資料一致,已包括增加,更新和刪除資料記錄功能 //主呼叫程式碼塊 SqlConnection conn = new SqlConnection("d

mybatis學習之路----批量更新資料兩種方法效率對比

點滴記載,點滴進步,願自己更上一層樓。 上節探討了批量新增資料,這節探討批量更新資料兩種寫法的效率問題。 實現方式有兩種, 一種用for迴圈通過迴圈傳過來的引數集合,迴圈出N條sql, 另一種 用mysql的case when 條件判斷變相的進行批量更新   下面進行實現

Mysql 一條SQL語句實現批量更新資料,update結合case、when和then的使用案例

如何用一條sql語句實現批量更新?mysql並沒有提供直接的方法來實現批量更新,但是可以用點小技巧來實現。 複製程式碼 程式碼如下: UPDATE mytable SET myfield = CASE id WHEN 1 THEN

ADO.NET大批量更新資料

ADO.NET大批量進行資料更新  public static void SqlBulkUpdate() { DataTable dt = ExcelHelper.ImportExcelFile("d://User1.xls"); //將Excel中的資料匯入到

C# SqlBulkCopy實現大資料插入資料庫

public bool SqlBulkCopyData(DataTable dt) { bool flag = true; if (dt != null && dt.Rows.Count >

Ibatis批量更新資料(mysql資料庫)

    protected SqlMapClientTemplate sqlMapClient;    public void setSqlMapClient(SqlMapClientTemplate sqlMapClient) {        this.sqlMapClient = sqlMapClien

php mysql 批量更新資料

使用原生 sql 批量更新使用者積分資料訂單列表中查出 $list,包含  buy_id , total_money 欄位                   $list = [ 0 => ['buyer_id' => 1,'

spring jdbcTemplate批量更新資料

引入了spring框架之後,jdbcTemplate可以直接使用 將jdbcTemplate依賴注入 @Autowired     private JdbcTemplate jdbcTemplate; public JdbcTemplate getJdbcTemplate

c# Sqlite批量新增資料

今天遇到了往Sqlite資料庫裡插入1400多條資料的情況,結果每次都需要一兩分鐘才能完成. 搜尋了一下,在這裡找到了解決辦法,所需要的時間直接變成不到2秒! internalstaticvoid FastInsertMany(DbConnection cnn) { us

使用JDBC讀取本地的Excel檔案並批量更新資料

package com.jqgj.test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; impo

jdbc批量更新資料

有些時候,適合用jdbc。比如讀一個大的excel檔案資料到資料庫 public static List<String> welfareImport(MultipartFile file,String id,String businessType,IWelfa

SqlServer 利用遊標批量更新資料

SqlServer 利用遊標批量更新資料 Intro 遊標在有時候會很有用,在更新一部分不多的資料時,可以很方便的更新資料,不需要再寫一個小工具來做了,直接寫 SQL 就可以了 Sample 下面來看一個實際示例: -- 宣告欄位變數 DECLARE @RegionCode INT; DECLARE @Reg