加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 数据源中String类型的给定值无法转换为指定目标列的int类

发布时间:2020-12-16 02:03:53 所属栏目:百科 来源:网络整理
导读:我试图从xml文件中读取值,然后使用bulkcopy将数据插入到我的数据库中. 我正在使用一个自定义类: class Customer { public int CustomerID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int ShowsNumb
我试图从xml文件中读取值,然后使用bulkcopy将数据插入到我的数据库中.

我正在使用一个自定义类:

class Customer
    {
        public int CustomerID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int ShowsNumber { get; set; }
        public int VisitNumber { get; set; }
        public int Cancellation { get; set; }
    }

我读了这样的数据:

List<Customer> customersList =
                (
                    from e in XDocument.Load(file).Root.Elements("cust")
                    select new Customer
                    {
                        CustomerID = (int)e.Attribute("custid"),FirstName = (string)e.Attribute("fname"),LastName = (string)e.Attribute("lname"),ShowsNumber = (int)e.Attribute("count_noshow"),VisitNumber = (int)e.Attribute("count_resos"),Cancellation = (int)e.Attribute("count_cancel"),}).ToList();

然后我将customersList插入到这样的数据表中:

DataTable dataTable = getBasicDataTable();
for (int i = 0; i < customersList.Count; i++)
                {
                    DataRow datarows = dataTable.NewRow();
                    datarows[0] = customersList[i].CustomerID;
                    datarows[1] = customersList[i].FirstName;
                    datarows[2] = customersList[i].LastName;
                    datarows[3] = customersList[i].ShowsNumber;
                    datarows[4] = customersList[i].VisitNumber;
                    datarows[5] = customersList[i].Cancellation;
                    dataTable.Rows.Add(datarows);
                }

然后我将数据插入我的数据库,如下所示:

但我得到了这个例外

using (SqlBulkCopy sbc = new SqlBulkCopy(GetConnectionString()))
            {
                sbc.DestinationTableName = XMLReader.databaseTable;
                sbc.WriteToServer(dataTable);
            }

The given value of type String from the data source cannot be converted to type int of the specified target column.

如你所见,当我从我的xml中提取数据时,我已经使用了强制转换为int和字符串,它正在工作.那么为什么在插入数据库时??我得到了那个例外?

注意

为了给你整个代码,这是getBasicDataTable函数

private DataTable getBasicDataTable()
        {
            DataTable dataTable = new DataTable();
            dataTable.Clear();
            dataTable.Columns.Add("customerID");
            dataTable.Columns.Add("firstName");
            dataTable.Columns.Add("lastName");
            dataTable.Columns.Add("showsNumber");
            dataTable.Columns.Add("visitNumber");
            dataTable.Columns.Add("cancellation");
            return dataTable;
        }

解决方法

在定义数据表时,需要将列指定为整数.像这样:-

dataTable.Columns.Add("customerID",typeof(int));

编辑:
我怀疑的另一个原因可能是你绑定数据表的方式(我的意思是列的顺序)与数据库表的绑定方式不匹配.原因是我认为默认映射不是Name to Name而不是SqlBulkCopy中的Index to Index.所以请重新检查您的数据库表顺序,它应该如下: –

CustomerID (INT)
FirstName (VARCHARNVARCHAR)
LastName (VARCHARNVARCHAR)
ShowsNumber (INT)
VisitNumber (INT)
Cancellation (INT)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读