C 使用SqlBulkCopy批量更新資料

2021-07-11 20:53:33 字數 1819 閱讀 5563

例子:

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);

trycatch (exception)

finally

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必須與資料庫中的列完全匹配(包括列數量及資料型別).

SqlBulkCopy的使用問題

在企業資訊化的過程中,使用了分層,資料庫介質使用sqlserver,開發平台使用.net,idevs2008。建立了乙個資料庫訪問層的類dal,其中有乙個功能,就是將乙個dataset儲存到資料庫中,這裡面就用到了sqlbulkcopy這個類。開始對使用sqlbulkcopy有些認識不清,特別是其事...

C 利用 SqlBulkCopy 提交

最近要遷移資料,乙個老版本的資料遷移到新版本的資料庫中,字段 配置 引數什麼的完全不一樣。糾結啊,寫 估計只花了1 5的時間,對欄位引數這些簡直是慘不忍睹啊。還算比較清楚結構的我,都已經無語了。最後遇到sqlbulkcopy各種問題 以前封裝好的方法只有單獨乙個表新增,呼叫了幾次方法,經常出現此 s...

SQLBulkCopy使用 sql批量新增

sqlbulkcopy,用於資料庫之間大批量的資料傳遞。通常用於新,舊資料庫之間資料的更新。即使表結構完全不同,也可以通過欄位間的對應關係,順利的將資料導過來。首先,sqlbulkcopy需要2個連線。分別連線到不同的舊表所在的資料庫,新錶所在的資料庫。如果是同乙個資料庫,就可以用同乙個sqlcon...