例子:
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...