【发布时间】:2011-02-24 19:28:07
【问题描述】:
我有一个要上传的数据表,但遇到以下异常:
"来自数据源的String类型的给定值不能转换为指定目标列的int类型。"
我认为它可能这样做的唯一原因是 DataTable 中有空单元格被上传到 INT 类型的列。我尝试为 DBNull.Value 切换所有空值,但这似乎不适用于此特定列。上传过程如下:
private void UploadTable(string tableName, DataTable table)
{
foreach (DataRow r in table.Rows)
{
foreach (DataColumn c in table.Columns)
if (r[c].ToString().Trim() == "")
r[c] = DBNull.Value;
}
using (SqlBulkCopy copy = new SqlBulkCopy(sqlCon))
{
copy.DestinationTableName = tableName;
try
{
copy.WriteToServer(table);
}
catch (Exception ex)
{
lblError.Content = ex.ToString();
}
}
}
我上传到的架构是:
[dbo].[table](
[Date] [smalldatetime] NOT NULL,
[Dollar] [varchar](50) NULL,
[CName] [varchar](100) NULL,
[tick] [varchar](10) NULL,
[id1] [varchar](10) NOT NULL,
[Total Quantity] [int] NULL,
[Quantity] [int] NULL
)
关于 SQLBulkCopy 和可为空的 int 库有什么我不知道的特别之处吗?任何意见表示赞赏。
【问题讨论】:
-
它在哪里抛出错误?在
copy.WriteToServer(table);行? -
@Abe Miessler - 更有可能 - 是的 - 可能是因为默认类型是字符串,他需要指定 int。
-
尝试将 r[c] = DBNull.Value 更改为 r[c] = null
-
@paolo - 它抛出同样的错误
-
@paolo - DBNull.Value 是正确的方法。
标签: c# sql nullable sqlbulkcopy invalidoperationexception