是否可以将 using (SqlBulkCopy bc = new SqlBulkCopy(TheConnString, options))
{
bc.DestinationTableName = destTableName;
bc.WriteToServer(theTable);
// Problem is theTable doesnt exist on database yet!
}
转储到尚不存在的SQL Server目标表中?我意识到一个选项是手动创建表,但我从用户输入的CSV导入,所以我没有列的先验知识。
sqlCon
答案 0 :(得分:1)
这里有一些代码可以帮助您动态创建表格:
static string GetSqlType(Type dataTableColunmType)
{
//per type mappings here
//https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-data-type-mappings
if (dataTableColunmType == typeof(string))
{
return "nvarchar(max)";
}
else if (dataTableColunmType == typeof(int))
{
return "int";
}
else if (dataTableColunmType == typeof(Single))
{
return "real";
}
else if (dataTableColunmType == typeof(double))
{
return "float";
}
else if (dataTableColunmType == typeof(DateTime))
{
return "datetime";
}
else if (dataTableColunmType == typeof(byte[]))
{
return "varbinary(max)";
}
else
{
throw new NotSupportedException($"Type {dataTableColunmType.Name} not supported");
}
}
static string GetCreateTableDDL(string tableName, DataTable table)
{
var ddl = new StringBuilder();
ddl.AppendLine($"create table [{tableName}] (");
foreach (DataColumn col in table.Columns)
{
ddl.Append($" [{col.ColumnName}] {GetSqlType(col.DataType)}, ");
}
ddl.Length = ddl.Length - ", ".Length;
ddl.Append(")");
return ddl.ToString();
}