SQlBulkCopy数据源中DateTime类型的给定值无法转换为指定目标列的int类型

Fra*_*era 9 c# sql performance parsing

我在尝试执行以下"Cities"DataTable的SqlBulkInsert时收到上述错误代码:

DataTable cityTable = new DataTable(City.TABLE_NAME);
cityTable.Columns.Add("id", typeof(int));
cityTable.Columns.Add("name", typeof(string));
cityTable.Columns.Add("ascii_name", typeof(string));
cityTable.Columns.Add("alternate_names", typeof(string));
cityTable.Columns.Add("latitude", typeof(double));
cityTable.Columns.Add("longitude", typeof(double));
cityTable.Columns.Add("feature_class", typeof(char));
cityTable.Columns.Add("feature_code", typeof(string));
cityTable.Columns.Add("country_code", typeof(string));
cityTable.Columns.Add("country_code2", typeof(string));
cityTable.Columns.Add("population", typeof(long));
cityTable.Columns.Add("elevation", typeof(int));
cityTable.Columns.Add("modification_date", typeof(DateTime));
cityTable.Columns.Add("admin1code", typeof(string));
cityTable.Columns.Add("admin2code", typeof(string));
cityTable.Columns.Add("admin3code", typeof(string));
cityTable.Columns.Add("admin4code", typeof(string));
cityTable.Columns.Add("gtopo30", typeof(int));
cityTable.Columns.Add("timezone_name", typeof(string));
cityTable.Columns.Add("version", typeof(Binary));
Run Code Online (Sandbox Code Playgroud)

以下是将每个实体添加到DataTable的代码:

object id = EvaluateNullity(parsedCity.Id);
object name = EvaluateNullity(parsedCity.Name);
object asciiName = EvaluateNullity(parsedCity.AsciiName);
object alternateNames = EvaluateNullity(parsedCity.AlternateNames);
object latitude = EvaluateNullity(parsedCity.Latitude);
object longitude = EvaluateNullity(parsedCity.Longitude);
object featureClass = EvaluateNullity(parsedCity.FeatureClass);
object featureCode = EvaluateNullity(parsedCity.FeatureCode);
object countryCode = EvaluateNullity(parsedCity.CountryCode);
object countryCode2 = EvaluateNullity(parsedCity.CountryCode2);
object population = EvaluateNullity(parsedCity.Population);
object elevation = EvaluateNullity(parsedCity.Elevation);
object modificationDate = EvaluateNullity(parsedCity.ModificationDate);
object admin1Code = EvaluateNullity(parsedCity.Admin1Code);
object admin2Code = EvaluateNullity(parsedCity.Admin2Code);
object admin3Code = EvaluateNullity(parsedCity.Admin3Code);
object admin4Code = EvaluateNullity(parsedCity.Admin4Code);
object gtopo30 = EvaluateNullity(parsedCity.Gtopo30);
object timeZoneName = EvaluateNullity(parsedCity.TimeZoneName);
object version = EvaluateNullity(parsedCity.Version);

cityRow["id"] = id;
cityRow["name"] = name;
cityRow["ascii_name"] = asciiName;
cityRow["alternate_names"] = alternateNames;
cityRow["latitude"] = latitude;
cityRow["longitude"] = longitude;
cityRow["feature_class"] = featureClass;
cityRow["feature_code"] = featureCode;
cityRow["country_code"] = countryCode;
cityRow["country_code2"] = countryCode2;
cityRow["population"] = population;
cityRow["elevation"] = elevation;
cityRow["modification_date"] = modificationDate;
cityRow["admin1code"] = admin1Code;
cityRow["admin2code"] = admin2Code;
cityRow["admin3code"] = admin3Code;
cityRow["admin4code"] = admin4Code;
cityRow["gtopo30"] = gtopo30;
cityRow["timezone_name"] = timeZoneName;
cityRow["version"] = version;
Run Code Online (Sandbox Code Playgroud)

以及EvaluateNullity的代码:

    public object EvaluateNullity(object entity)
    {
        return entity ?? DBNull.Value;
    }
Run Code Online (Sandbox Code Playgroud)

我从这个错误消息的理解是,一个DateTime值被放置在上述int列之一.但是,稍后进行快速条件调试,并且立即窗口中的检查显示没有任何int列具有置于其中的DateTime类型. http://desmond.imageshack.us/Himg42/scaled.php?server=42&filename=mod1rm.jpg&res=landing http://desmond.imageshack.us/Himg37/scaled.php?server=37&filename=modyf.jpg&res=landing

我真的很难过.

Fra*_*era 24

来自大卫安德烈斯:

仔细检查cityTable中定义的列的顺序是否与数据库表本身中的列顺序匹配.

  • 我已经解释了这一点[这里](http://stackoverflow.com/questions/16892702/the-given-value-of-type-string-from-the-data-source-cannot-be-converted-to型/ 20542022#20542022).实际上它不仅是顺序,而且目标列的索引应该映射到源表的列.您可以使用SqlBulkCopyColumnMapping执行此操作. (2认同)

kmk*_*emp 11

此错误的一个非显而易见的原因是您必须具有表示标识列的属性,即使您可以将其保留为未设置.

  • 伙计,那是给我的;-) (2认同)