从数据源String类型的给定值不能转换为键入指定的目标列BIGINT [英] The given value of type String from the data source cannot be converted to type bigint of the specified target column

查看:701
本文介绍了从数据源String类型的给定值不能转换为键入指定的目标列BIGINT的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码:

 保护无效SendToServer_Click(对象发件人,EventArgs五)
{
数据表值=会话[valuesdt]作为数据表;

如果(Values.Rows.Count大于0)
{
//修复了默认值
的for(int i = 0; I<价值观。 Rows.Count;我++)
{
Values.Rows [I] [Mobile1] = Values.Rows [I] [Mobile1]的ToString()==? (Values.Rows [I] [Mobile1]的ToString()):0 double.Parse;
Values.Rows [I] [移动电话2] = Values.Rows [I] [移动电话2]。的ToString()==? (Values.Rows [I] [移动电话2]的ToString()):0 double.Parse;
Values.Rows [I] [电话] = Values.Rows [I] [电话]。的ToString()==? 0:double.Parse(Values.Rows [I] [电话]的ToString());
Values.Rows [I] [类别] = Values.Rows [I] [分类]的ToString()。
}

DataTable的DV = Values.DefaultView.ToTable(真的,Mobile1,移动电话2,电话,类别);
BulckCopyDataTable(DV,客户,1000);
}
}

公共无效BulckCopyDataTable(DT数据表,串destinationTable会,诠释BATCHSIZE)
{
connection.Open();使用(SqlBulkCopy的副本=新SqlBulkCopy的(连接))
{


copy.BatchSize = BATCHSIZE;
copy.DestinationTableName = destinationTable会;
copy.WriteToServer(DT);
的Connection.close();
}
}



我不知道为什么是这个错误罚全中,数据库:

  Mobile1 BIGINT,移动电话2 BIGINT,电话BIGINT,类别为nvarchar(MAX)


解决方案

我发现的这个bytes.com线程



所有你需要做的就是地图的来源与使用SqlBulkCopyColumnMapping的目标表中的列。

  bulkCopy.ColumnMappings 。新增(新SqlBulkCopyColumnMapping(0,1)); 
bulkCopy.ColumnMappings.Add(新SqlBulkCopyColumnMapping(1,2));
bulkCopy.ColumnMappings.Add(新SqlBulkCopyColumnMapping(2,3));
bulkCopy.ColumnMappings.Add(新SqlBulkCopyColumnMapping(3,6)); //看这里,索引是不同的
bulkCopy.ColumnMappings.Add(新SqlBulkCopyColumnMapping(4,8)); //并再次
bulkCopy.ColumnMappings.Add(新SqlBulkCopyColumnMapping(5,9));



我也发现了同样的解决方案的此处之前发现上述情况,但对我来说我有一些领域失踪在源。该领域是正确的顺序虽然提到了字段的实际INDEX /订单。如果我没有失踪的领域它会奏效。


That's my code :

protected void SendToServer_Click(object sender, EventArgs e)
{
    DataTable Values = Session["valuesdt"] as DataTable;

    if (Values.Rows.Count > 0)
    {
        //Fix up default values
        for (int i = 0; i < Values.Rows.Count; i++)
        {
            Values.Rows[i]["Mobile1"] = Values.Rows[i]["Mobile1"].ToString() == "" ? 0 : double.Parse(Values.Rows[i]["Mobile1"].ToString());
            Values.Rows[i]["Mobile2"] = Values.Rows[i]["Mobile2"].ToString() == "" ? 0 : double.Parse(Values.Rows[i]["Mobile2"].ToString());
            Values.Rows[i]["Tel"] = Values.Rows[i]["Tel"].ToString() == "" ? 0 : double.Parse(Values.Rows[i]["Tel"].ToString());
            Values.Rows[i]["Category"] = Values.Rows[i]["Category"].ToString();
        }

        DataTable dv = Values.DefaultView.ToTable(true, "Mobile1", "Mobile2", "Tel", "Category");
        BulckCopyDataTable(dv, "client", 1000);
    }
}

public void BulckCopyDataTable(DataTable dt,string DestinationTable,int batchSize)
{
    connection.Open();

    using (SqlBulkCopy copy = new SqlBulkCopy(connection))
    {
        copy.BatchSize = batchSize;
        copy.DestinationTableName = DestinationTable;
        copy.WriteToServer(dt);
        connection.Close();
    }
}

I have no idea why this error is been throws in the database :

Mobile1 bigint, Mobile2 bigint, Tel bigint, Category nvarchar(MAX)

解决方案

I found an answer in this bytes.com thread.

All you have to do is map the columns of the source to the destination table with the use of SqlBulkCopyColumnMapping.

bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(0, 1));
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(1, 2));
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(2, 3));
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(3, 6)); //look here, index is different
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(4, 8)); //and again
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(5, 9));

I also found the same solution here before finding the above, but in my case I had some fields missing in the source. The fields were in the correct order although it referred to the actual INDEX/ORDER of the fields. If I didn't have the missing fields it would have worked.

这篇关于从数据源String类型的给定值不能转换为键入指定的目标列BIGINT的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆