我正在调用SqlBulkCopy.WriteToServer,传入数据表。该表有五列,但是我只想填充每行两列。
float uniform fadeOut;
in vec4 fragColor;
out vec4 finalColor;
....
finalColor = mix(vec4(0.0), fragColor, fadeOut);
我得到的错误提示某个地方,一个字符串被强制转换为一个位,但是我唯一拥有的是成功列,该列未被触及。
异常消息:“数据源中String类型的给定值无法转换为指定目标列的类型位。”
这是我要定位的表
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;
}
无论如何,你们大家都可以提供任何帮助。
答案 0 :(得分:2)
即使不填写所有列,也要将所有数据表传递给批量。标识列ID导致索引问题。
我建议将数据批量存储到临时表中,然后使用T-SQL语句复制到LogFiles。
答案 1 :(得分:1)
我以前有这个问题。我与新添加的列的顺序有关。确保使用SetOrdinal
添加新列是基表的顺序。
logFileTable.Columns.Add(pathColumn).SetOrdinal(1);//for Path
logFileTable.Columns.Add(pathColumn).SetOrdinal(2);//for FileName