Dapper:无法从 dbf 解析字符串(错误解析列)
Dapper: Not able to parse string from dbf(Error parsing column)
我想使用 dapper 查询 dbf 文件。在我的文件 example.dbf 中,我有两列:
- 值 - 类型为 NUMERIC
- 名称 - 类型为字符
我写classExampleDbf
class ExampleDbf
{
public int Value { get; set; }
public string Name { get; set; }
}
现在我想写两个简单的查询
var listOne = connection.Query<ExampleDbf>("SELECT value FROM Example");
var listTwo = connection.Query<ExampleDbf>("SELECT name, value FROM Example");
ListOne 可以,但是当我执行 listTwo 时,我有以下 System.Data.DataException:
Additional information: Error parsing column 0 (name=System.Byte[] - Object)
当我使用标准 DataReader 时,我必须编写类似的东西
example.name = System.Text.Encoding.ASCII.GetString((byte[])reader["name"]).Trim();
当然可以这样写:
class ExampleDbf2
{
public int Value { get; set; }
public byte[] Name { get; set; }
public string StringName
{
get
{
return System.Text.Encoding.ASCII.GetString((byte[])Name ).Trim();
}
}
}
现在可以了
var listTwo = connection.Query<ExampleDbf2>("SELECT name, value FROM Example");
但是这个解决方案很丑陋,也许有人有更好的解决方案。
您总是可以return一个动态,然后将其映射到您的对象并在对象初始化期间执行转换操作。
var listTwo = connection.Query<dynamic>("SELECT name, value FROM Example")
.Select(x => new ExampleDbf
{
Value = x.value,
Name = System.Text.Encoding.ASCII.GetString((byte[])x.name).Trim()
}).ToList();
我想使用 dapper 查询 dbf 文件。在我的文件 example.dbf 中,我有两列:
- 值 - 类型为 NUMERIC
- 名称 - 类型为字符
我写classExampleDbf
class ExampleDbf
{
public int Value { get; set; }
public string Name { get; set; }
}
现在我想写两个简单的查询
var listOne = connection.Query<ExampleDbf>("SELECT value FROM Example");
var listTwo = connection.Query<ExampleDbf>("SELECT name, value FROM Example");
ListOne 可以,但是当我执行 listTwo 时,我有以下 System.Data.DataException:
Additional information: Error parsing column 0 (name=System.Byte[] - Object)
当我使用标准 DataReader 时,我必须编写类似的东西
example.name = System.Text.Encoding.ASCII.GetString((byte[])reader["name"]).Trim();
当然可以这样写:
class ExampleDbf2
{
public int Value { get; set; }
public byte[] Name { get; set; }
public string StringName
{
get
{
return System.Text.Encoding.ASCII.GetString((byte[])Name ).Trim();
}
}
}
现在可以了
var listTwo = connection.Query<ExampleDbf2>("SELECT name, value FROM Example");
但是这个解决方案很丑陋,也许有人有更好的解决方案。
您总是可以return一个动态,然后将其映射到您的对象并在对象初始化期间执行转换操作。
var listTwo = connection.Query<dynamic>("SELECT name, value FROM Example")
.Select(x => new ExampleDbf
{
Value = x.value,
Name = System.Text.Encoding.ASCII.GetString((byte[])x.name).Trim()
}).ToList();