2012-07-10 89 views
1

我有这样的SQL查询:保存UTF8字符串由SqlBulkCopy的C#

INSERT INTO myTable (myField) VALUES (N'Thermal Oxide: 0 Å to 40 μm') 

,我想通过使用SqlBulkCopy像那样exeute它:

DataTable myDataTable=myDb.getData("select top 1* from myTable").Clone(); 
DataRow dr = myDataTable.NewRow(); 
dr["myField"] ="N'Thermal Oxide: 0 Å to 40μm'"; 
myDataTable.Rows.Add(dr); 
this.openCon(); 
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(con)) { 
    bulkCopy.DestinationTableName = dt.TableName; 
    bulkCopy.BulkCopyTimeout = 100; 
    bulkCopy.WriteToServer(myDataTable); 
} this.closeCon(); 

是工作完美,但我的问题是:我可以在哪里启动'N'前缀?也许没有必要?

感谢, chani

+2

有没有必要,你是对的。类型转换由ADO.Net驱动程序处理。 – 2012-07-10 10:58:02

回答

1

刚:

dr["myField"] = "Thermal Oxide: 0 Å to 40μm"; 

N'...'只需要文字在TSQL;但由于你正在采取数据(而不是TSQL),你不需要担心。在SqlBulkCopy的情况下,它将以原始格式下载到服务器,而不是直接作为TSQL。

在更常见的适配器或ORM情况下,库(或许很可能)会使用参数,否则它会担心自身溢出。

也许还应该指出,通过SqlBulkCopy增加1行是矫枉过正。但它应该工作。