今天,想將以前做的一個(gè)程序增加點(diǎn)功能,原本就使用SqlBulkCopy批量、定時(shí)的從目錄中的txt文件導(dǎo)入數(shù)據(jù)到Sqlserver中。以前一直都使用正常,但是不知怎的就老是出現(xiàn)一個(gè)錯(cuò)誤
SqlBulkCopy 來(lái)自數(shù)據(jù)源的 String 類型的給定值不能轉(zhuǎn)換為指定目標(biāo)列的類型 nvarchar。
在網(wǎng)上找了下,大都說(shuō)是因?yàn)?a href="http://www.babyishan.com/tag/%e6%95%b0%e6%8d%ae%e5%ba%93">數(shù)據(jù)庫(kù)中的字段過(guò)小(
來(lái)自數(shù)據(jù)源的 String 類型的給定值不能轉(zhuǎn)換為指定目標(biāo)列的類型 nvarchar。
),造成截?cái)嗟腻e(cuò)誤導(dǎo)致,仔細(xì)檢查后發(fā)現(xiàn)我的表設(shè)計(jì)中沒有字段過(guò)小的情況,也不是單引號(hào)的問(wèn)題。
后經(jīng)仔細(xì)調(diào)試發(fā)現(xiàn),由于使用SqlBulkCopy導(dǎo)入時(shí)我的文本文件與庫(kù)中的表列不對(duì)應(yīng)造成的。我的文本文件中有字段18個(gè),而我的表中只使用了9個(gè)字段,且有兩個(gè)是文本文件中沒有的(即表結(jié)構(gòu)1中的[Level]與[Cagegory]字段),由數(shù)據(jù)庫(kù)填入默認(rèn)值。表結(jié)構(gòu)如下:
代碼如下:
表結(jié)構(gòu)11
CREATE TABLE [dbo].[Ryxx](
[Name] [nvarchar](30) NOT NULL,
[IdCardNo] [nvarchar](30) NOT NULL,
[Sex] [nvarchar](2) NOT NULL,
[Height] [nvarchar](5) NULL,
[Level] [nvarchar](2) NULL, –默認(rèn)為A
[Category] [nvarchar](20) NULL, –默認(rèn)為“重點(diǎn)管理”
[Sponsor] [nvarchar](100) NULL,
[Contact] [nvarchar](30) NULL,
[Phone] [nvarchar](50) NULL,
[Number] [nvarchar](30) NULL
) ON [PRIMARY]
表結(jié)構(gòu)1
修改后的表結(jié)構(gòu)如下
代碼如下:
CREATE TABLE [dbo].[Ryxx](
[Name] [nvarchar](30) NOT NULL,
[IdCardNo] [nvarchar](30) NOT NULL,
[Sex] [nvarchar](2) NOT NULL,
[Height] [nvarchar](5) NULL,
[Sponsor] [nvarchar](100) NULL,
[Contact] [nvarchar](30) NULL,
[Phone] [nvarchar](50) NULL,
[Number] [nvarchar](30) NULL,
[Level] [nvarchar](2) NULL, –默認(rèn)為A
[Category] [nvarchar](20) NULL –默認(rèn)為“重點(diǎn)管理”
) ON [PRIMARY]
至此,問(wèn)題解決。分析原因是因?yàn)閺奈谋疚募蝎@取的字段對(duì)應(yīng)到表中缺省列中去了,產(chǎn)生了截?cái)啵胂胧褂胋cp 時(shí)應(yīng)該也會(huì)出現(xiàn)這樣的錯(cuò)誤。