在SQL Server中处理数据的最佳方法?

时间:2012-02-28 14:54:40

标签: visual-studio-2010 sql-server-2005 entity-framework linq-to-sql c#-4.0

嗯,我现在介入了。我正在将一个程序从Access vba转换为C#,所以我可以独立运行它(这是另一个故事......)程序读取一个Excel文件,然后验证每一行和每列以确保数据有效(数字等)然后查找各种数据字段以在SQL Server上创建事务表。事务表永远不会重新验证,所以第一次尝试时它必须是正确的。

我已经习惯了程序语言(尽管我对T-SQL有一定的了解),但是现在(VS2010)看起来我需要使用“LINQ to SQL”或“Entity Data Model”来获取数据超出SQL Server(2005)。从历史上看,我使用过DAO或ADO记录集。我需要一次检索多个列,但总的来说,我不会更新表。我可以使用SQL Server存储过程(可能是ADO?)来进行更新。

虽然我已经开始使用Windows Forms,但在结束之前我可能会将其转移到控制台应用程序。

你们推荐什么?我的书(C#4.0 Griffiths,Adams和Liberty)一直在讨论实体数据模型。但既然我只使用SQL Server(2005),是不是“Linq to SQL”更合适?任何参考帮助我开始?这是我现在使用的一个示例“方法”(在vba ...中),这是我第一次尝试时使用的独立方法:

Function ValidateOverride(LaborRateID As Variant) As Long
If IsNull(LaborRateID) = True Or IsNumeric(LaborRateID) = False Then
    ValidateOverride = 0
    Exit Function
End If

Dim rstOverrideLaborRates As DAO.Recordset2
Set rstOverrideLaborRates = CurrentDb.OpenRecordset("SELECT * FROM tblStaffAugLaborRates WHERE ID=" & LaborRateID, dbOpenDynaset, dbSeeChanges + dbFailOnError)
If rstOverrideLaborRates.EOF Then
    HandleMessages "Row Rejected -- Invalid Override Labor Rate"
    ValidateOverride = 0
Else
    ValidateOverride = LaborRateID
    If (dtCurrentWorkDate < rstOverrideLaborRates!EffectiveDate) Or (dtCurrentWorkDate > rstOverrideLaborRates!ExpirationDate) Then
        HandleMessages "Row Rejected -- Override Labor Rate is not within its valid dates"
        ValidateOverride = 0
    End If
    If rstOverrideLaborRates!VendorID <> lngCurrentVendorID Then
        HandleMessages "Row Rejected -- Override Labor Rate is not  valid for this vendor"
        ValidateOverride = 0
    End If
End If
rstOverrideLaborRates.Close
Set rstOverrideLaborRates = Nothing

End Function

2 个答案:

答案 0 :(得分:1)

使用实体框架,最新的补丁使其可行。 我使用nhibernate,因为这在我工作的地方更常见。 如果这个问题在一两年前出现,我不推荐实体框架,但现在几天它是一个可行的选择。 这是非常主观的,选择你认为会为你做的事情并尝试一下,它真的不仅仅是它。

答案 1 :(得分:0)

你确定要重写你的程序吗?除了解析excel之外还有什么其他的东西?我建议你使用SSIS,我已经写了一些导入/导出例程和使用SSIS的转换,它的极端快,而且它们更improving it。这真的很棒!

我认为你不需要,但是如果你需要一个GUI你可以使用启动SSIS包并被告知过程中发生了什么。

PS:开箱即用