这里的目标是在输入csv文件后,一个神奇的工具将使用csv中的字段输出c#类.我们来看看例子吧.
输入myFile.csv:
Year,Make,Model
1997,Ford,E350
2000,Mercury,Cougar
Run Code Online (Sandbox Code Playgroud)
输出myFile.cs
public class myFile
{
public string Year;
public string Make;
public string Model;
}
Run Code Online (Sandbox Code Playgroud)
所以,我唯一需要解决的是属性类型.之后我会使用FileHelpers这个类来读取csv文件.稍后它将映射到EntityFramework类(使用AutoMapper)并保存到数据库.
实际上,https://csv2entity.codeplex.com/看起来正在做我需要的,但它只是不起作用 - 我安装它并且在我的Visual Studio中没有任何改变,没有出现新的模板.该项目已完全死亡.打开源代码和......决定我可能只是在stackoverflow中问这个问题:)
FileHelpers只有一个简单的向导,允许您手动添加字段.但我有50个字段,这不是我最后一次需要这样做,所以这里首选自动解决方案.
我相信这个问题以前解决了很多次,有什么帮助吗?
问题是:为什么在执行查询和存储过程时数据类型如何转换/解释会有区别?
我有一个存储过程,它给了我:
Msg 8115, Level 16, State 2, Procedure sp****ChargePackagingTest, Line 9
Arithmetic overflow error converting expression to data type nvarchar.
Run Code Online (Sandbox Code Playgroud)
问题是它只在作为存储过程执行时发生:
exec [sp****ChargePackagingTest] '2016-10-14', '2016-10-25'
Run Code Online (Sandbox Code Playgroud)
但是,如果我执行相同的查询(在存储过程外部复制并使用相同的参数声明并使用SQL管理工作室),我不会遇到问题.
最重要的是,我知道问题的确切位置:CONVERT(nvarchar(2),JobPDF.Pages/2)
存储过程说问题在第9行,但实际上并非如此.如果我将它更改为nvarchar(3),它甚至可以作为存储过程执行.
但是,JobPdf.Pages是可以为null的int类型:值只有24,48,72(我已经检查过).此外,它仅在有足够数据时崩溃,即,它不是特定于日期范围,而是特定于日期范围的长度.
存储过程代码:
ALTER PROCEDURE [dbo].[sp****ChargePackagingTest]
@dateFrom DateTime, @dateTo DateTime
AS
BEGIN
SELECT costPerOrder****.[Product Name], costPerOrder****.[Pack Price], SUM([Pack Count]) as [Pack Count], SUM(costPerOrder****.[Packaging Cost]) as [Packaging Cost]
FROM
(
-- Raw data aggregated by order
SELECT [Product Name], [Pack Price]
, CEILING(SUM(Quantity) * 1.0 / [Pack Items]) as [Pack Count] -- 1.0 …
Run Code Online (Sandbox Code Playgroud)