在 C# DataTable 中将字符串转换为 byte[] 时出错

问题描述 投票:0回答:1

我正在将各种文件中的 csv 数据分别读入 c#

DataTable
对象。由于它是 csv,我最初将所有数据作为字符串读取。之后我想使用
SqlBulkCopy
类将其写入 sql server 表。

我需要将列转换为目标中的目标数据类型,并希望通过隐式让 DataTable 进行转换来做到这一点:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;

namespace SQLBulkTest
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable("dt");

            DataColumn item = new DataColumn("item", typeof(String));
            dt.Columns.Add(item);

            DataColumn type = new DataColumn("type", typeof(String));
            dt.Columns.Add(type);

            DataColumn bin = new DataColumn("bin", typeof(String));
            dt.Columns.Add(bin);

            DataColumn floatItem = new DataColumn("floatItem", typeof(String));
            dt.Columns.Add(floatItem);

            // Add five items.
            DataRow NewRow;
            var teststring = "0x0050568F00041ED783A79F94B797E9B6";

            for (int i = 0; i < 5; i++)
            {
                NewRow = dt.NewRow();
                NewRow["item"] = i.ToString();
                NewRow["type"] = "Type " + i;
                NewRow["bin"] = teststring;
                NewRow["floatItem"] = i.ToString() + "," + i.ToString();
                dt.Rows.Add(NewRow);
            }

            DataTable dtCloned = dt.Clone();
            dtCloned.Columns[0].DataType = typeof(Int32);
            dtCloned.Columns[2].DataType = typeof(System.Byte[]);
            dtCloned.Columns[3].DataType = typeof(double);
            foreach (DataRow row in dt.Rows)
            {
                var mappedRow = dt.NewRow();
                mappedRow[0] = row[0];
                mappedRow[1] = row[1];
                mappedRow[2] = Encoding.UTF8.GetBytes((string)row[0]);
                mappedRow[3] = row[3];
                dtCloned.Rows.Add(mappedRow.ItemArray);
            }
        }
    }
}

运行代码时出现以下错误:

System.ArgumentException: 'Type of value has a mismatch with column typeCouldn't store 
<System.Byte[]> in bin Column.  Expected type is Byte[].'

我可以做什么来导入二进制数据。在SQL Server中,需要存储为varbinary。

c# datatable type-conversion
1个回答
0
投票

您的代码中有错误。

您应该从 dtCloned 表创建 mappedRow。因为这个是Byte[]列数据类型的DataTable

var mappedRow = dtCloned.NewRow();
© www.soinside.com 2019 - 2024. All rights reserved.