gpt4 book ai didi

c# - SqlBulkCopy 在运行 WriteToServer(DataTable) 时抛出 System.FormatException

转载 作者:行者123 更新时间:2023-11-30 12:17:07 24 4
gpt4 key购买 nike

目前我正在编写一种方法来从 CSV 文件中读取数据并导入到 SQL 表中。

        DataTable dt = new DataTable();
String line = null;
int i = 0;

while ((line = reader.ReadLine()) != null)
{
String[] data = line.Split(',');
if (data.Length > 0)
{
if (i == 0)
{
foreach (object item in data)
{
DataColumn c = new DataColumn(Convert.ToString(item));
if (Convert.ToString(item).Contains("DATE"))
{
c.DataType = System.Type.GetType("System.DateTime");
}
else { c.DataType = System.Type.GetType("System.String"); }
dt.Columns.Add(c);
}
i++;
}
else
{
DataRow row = dt.NewRow();
for (int j = 0; j < data.Length; j++)
{
if (dt.Columns[j].DataType == System.Type.GetType("System.DateTime"))
{
row[j] = Convert.ToDateTime(data[j]);
}
else
{
row[j] = data[j];
}
}
dt.Rows.Add(row);
}
}
}
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[Constant.CONNECTION_STRING_NAME].ConnectionString);
SqlBulkCopy s = new SqlBulkCopy(con);
s.DestinationTableName = "abc";
con.Open();
s.WriteToServer(dt);

运行该方法时的问题,总是在s.WriteToServer(dt)处抛出Exception;说

System.FormatException:字符串未被识别为有效的 DateTime。有一个从索引 0 开始的未知单词。

我调试并看到所有数据都正确加载到 DataTable 中。这是我的 CSV 文件中数据行的示例

DATA_VENDOR_ID,DATA_VENDOR_SUB_ID,DATA_VENDOR_CLIENT_ID,DATA_VENDOR_ACTIVITY_CODE,ACTIVITY_NAME,EFFECTIVE_DATE,ACTIVITY_LEVEL1,ACTIVITY_LEVEL2,ACTIVITY_LEVEL3,ACTIVITY_LEVEL4,ACTIVITY_LEVEL5,PARTICIPANT_ID,DATA_VENDOR_ALT_ID,FILE_CREATION_DATE,INC_VALUE    
V01,,22097,ABCD01,Physical Activity,10/01/2010,Entertain Kiosk,ABCD - EFG 54,30,,AB01,W1234567891,,08/07/2006,100

和我的 SQL 表架构:

RowID   int Unique/AutoIncrement
DataVendorId varchar(32)
DataVendorSubId varchar(32)
DataVendorClientId varchar(32)
DataVendorActivityCode varchar(32)
ActivityName varchar(64)
EffectiveDate datetime
ActivityLevel1 varchar(253)
ActivityLevel2 varchar(253)
ActivityLevel3 varchar(253)
ActivityLevel4 varchar(253)
ActivityLevel5 varchar(253)
ParticipantID varchar(32)
DataVendorAltId varchar(32)
FileCreationDate datetime
IncValue varchar(5)
CreatedDate datetime optional/allow null
ModifiedDate datetime optional/allow null

最佳答案

我看到的第一个问题是您将遇到 RowID 列的问题;我预计它目前正在尝试将您的数据偏移一列 - 它不知道您正在忽略它。您可以弄乱映射,或者(在您的数据表中)添加一个 RowID 列(在索引 0 处)——但请注意,除非您启用身份插入,否则 SQL Server 将忽略这些值。

也许尝试更明确的日期时间转换:

row[j] = DateTime.ParseExact(data[j], "dd/MM/yyyy", CultureInfo.InvariantCulture);

请注意,我无法根据数据判断这是 dd/MM 还是 MM/dd,因此您可能需要对其进行调整。

关于c# - SqlBulkCopy 在运行 WriteToServer(DataTable) 时抛出 System.FormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4162155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com