Я проверил это с явным преобразованием в столбцах с данными и без него, но оно продолжало выдавать исключение System.InvalidOperationException.
К вашему сведению, эти столбцы с typeof (string) все nvarchar в моей базе данных , Я передаю список под названием test , который имеет пользовательский тип.
Изначально я не собирался использовать sqlbulkcopy, но с тех пор, как я перенес на базу данных azure, мне нужен более быстрый запрос вставки.
Буду признателен за любой совет.
var dt = new DataTable();
dt.Columns.Add("LinkID", typeof(string));
dt.Columns.Add("RoadName", typeof(string));
dt.Columns.Add("RoadCategory", typeof(string));
dt.Columns.Add("SpeedBand");
dt.Columns.Add("MinimumSpeed", typeof(string));
dt.Columns.Add("MaximumSpeed", typeof(string));
dt.Columns.Add("StartLatitude");
dt.Columns.Add("StartLongitude");
dt.Columns.Add("EndLatitude");
dt.Columns.Add("EndLongitude");
dt.Columns.Add("Distance", typeof(string));
for (int i = 0; i < test.Count; i++)
{
dt.Rows.Add(test[i].LinkID, test[i].RoadName, test[i].RoadCategory,
test[i].SpeedBand, test[i].MinimumSpeed, test[i].MaximumSpeed,
test[i].StartLatitude, test[i].StartLongitude, test[i].EndLatitude,
test[i].EndLongitude, test[i].Distance);
}
string sqlConnectionString = "//secret";
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
try
{
conn.Open();
}
catch (Exception e)
{
Debug.WriteLine(e);
}
using (var sqlBulk = new SqlBulkCopy(conn))
{
//sqlBulk.BatchSize = 1000;
sqlBulk.DestinationTableName = "dbo.TrafficSpeedBands";
try
{
// Write from the source to the destination.
sqlBulk.WriteToServer(dt);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
}