gpt4 book ai didi

c# - 如何检查 SqlBulkCopy 上的列映射?

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:50 26 4
gpt4 key购买 nike

我正在调用 SqlBulkCopy.WriteToServer,传入一个数据表。该表有五列,但我只想在每行中填充两列。

public static void LoadLogFiles(SqlConnection connection, IEnumerable<LogFile> logFiles)
{
using (var bulkCopier = new SqlBulkCopy(connection))
{
bulkCopier.DestinationTableName = ConfigurationManager.AppSettings["DestinationTable"];
var dt = BuildLogFileDataTable(logFiles);
try
{
bulkCopier.WriteToServer(dt);
}
catch (Exception e)
{
throw new Exception("SqlBulkCopy failed.", e);
}
}
}
private static DataTable BuildLogFileDataTable(IEnumerable<LogFile> logFiles)
{
var logFileTable = new DataTable("LogFiles");

var idColumn = new DataColumn();
idColumn.DataType = Type.GetType("System.Int32");
idColumn.ColumnName = "Id";
logFileTable.Columns.Add(idColumn);

var pathColumn = new DataColumn();
pathColumn.DataType = Type.GetType("System.String");
pathColumn.ColumnName = "Path";
logFileTable.Columns.Add(pathColumn);

var fileNameColumn = new DataColumn();
fileNameColumn.DataType = Type.GetType("System.String");
fileNameColumn.ColumnName = "FileName";
logFileTable.Columns.Add(fileNameColumn);

var successColumn = new DataColumn();
successColumn.DataType = Type.GetType("System.Boolean");
successColumn.ColumnName = "Success";
logFileTable.Columns.Add(successColumn);

var errorMessageColumn = new DataColumn();
errorMessageColumn.DataType = Type.GetType("System.String");
errorMessageColumn.ColumnName = "ErrorMessgae";
logFileTable.Columns.Add(errorMessageColumn);

foreach (var logFile in logFiles)
{
var row = logFileTable.NewRow();
row["Path"] = logFile.Path;
row["FileName"] = logFile.FileName;

logFileTable.Rows.Add(row);
}

return logFileTable;
}

我得到的错误表明在某个地方,一个字符串被转换成一个位,但我唯一拥有的是 Success 列,它没有被触及。

异常信息:“数据源中String类型的给定值无法转换为指定目标列的类型bit。”

这是我要定位的表:

CREATE TABLE [dbo].[LogFiles] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Path] NVARCHAR (MAX) NULL,
[FileName] NVARCHAR (MAX) NULL,
[Success] BIT NULL,
[ErrorMessgae] NVARCHAR (MAX) NULL,
CONSTRAINT [PK_dbo.LogFiles] PRIMARY KEY CLUSTERED ([Id] ASC)
);

无论如何,如果你们能提供任何帮助,那就太好了。

最佳答案

即使您没有填充所有列,您也会将所有数据表传递给批量。标识列 Id 导致索引问题。

我建议将数据批量存储到暂存表,然后使用 T-SQL 语句复制到 LogFiles。

关于c# - 如何检查 SqlBulkCopy 上的列映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52299221/

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