【问题标题】:Best Way To Process Data in SQL Server?在 SQL Server 中处理数据的最佳方式?
【发布时间】:2025-12-16 05:40:01
【问题描述】:

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

我习惯于过程语言(虽然我对 T-SQL 的了解尚可),但现在(VS2010)看来我需要使用“LINQ to SQL”或“实体数据模型”来获取数据出 SQL Server (2005)。从历史上看,我使用过 DAO 或 ADO 记录集。我需要一次检索多个列,但总的来说,我不会更新表。我可以使用 SQL Server 存储过程(大概是 ADO?)进行更新

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

你们有什么推荐的吗?我的书(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

【问题讨论】:

  • 请不要在标题前加上“C#”之类的前缀。这就是标签的用途。
  • LINQ to SQL 和实体框架都可以与 SQL Server 一起使用,而且微软最近对 EF 的重视程度超过了 LINQ to SQL。听起来你可以用一本关于 LINQ 的书来做,基本上......
  • 好的,我不会这样给我的标题加前缀。我更习惯于没有标签的论坛。感谢您的建议。

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


【解决方案1】:

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

【讨论】:

【解决方案2】:

你确定要重写你的程序吗?除了解析excel还有什么作用?我会推荐你​​使用SSIS,我已经编写了一些导入/导出例程和使用 SSIS 进行的转换,它非常 快,而且 improving it 甚至更多。真的很不错!

我认为您不需要,但如果您需要 GUI,您可以使用启动 SSIS 包并在此过程中收到通知。

PS:日志记录是开箱即用的

【讨论】:

  • 我蹑手蹑脚地进入了 SSIS。我遇到了问题。身份验证有时是个问题(Excel 工作簿在 SP 中......)然后,我能够(我不记得如何)实际读取 .xlsx,但出现了我无法解决的列错误。请记住,某些列“看起来”是数字,但不是,反之亦然。 Excel 是一个非常弱类型的系统,它会做出假设并相应地传递变量。我是不是太轻易放弃了?
  • 是的,你放弃得太容易了。在 Excel 连接管理器中,您可以将所有列配置为字符串并稍后转换值。顺便说一句,我自己经常使用 EF dbcontext,但对于这种情况,我会选择 SSIS。也许用 SSIS 标签以另一种形式问这个问题?
最近更新 更多