C# 将项目转换为SQL Server,设计思路?

C# 将项目转换为SQL Server,设计思路?,c#,.net,sql-server,sqlclr,C#,.net,Sql Server,Sqlclr,目前,我坐在一个丑陋的商业应用程序上,该应用程序是用Access编写的,它每两天获取一个电子表格并将其导入MDB。我目前正在将一个主要项目转换为SQL Server和.net,特别是在c#中 为了保存这些信息,有两个表(这里的别名),我将它们称为Master_Prod和Master_Sheet,它们在Master_Prod表的标识键父表ProdID上联接。还有另外两个表用于存储历史记录,即历史记录Prod和历史记录Sheet。有更多的表扩展到Master_Prod之外,但出于解释目的,将其限制为

目前,我坐在一个丑陋的商业应用程序上,该应用程序是用Access编写的,它每两天获取一个电子表格并将其导入MDB。我目前正在将一个主要项目转换为SQL Server和.net,特别是在c#中

为了保存这些信息,有两个表(这里的别名),我将它们称为Master_Prod和Master_Sheet,它们在Master_Prod表的标识键父表ProdID上联接。还有另外两个表用于存储历史记录,即历史记录Prod和历史记录Sheet。有更多的表扩展到Master_Prod之外,但出于解释目的,将其限制为两个表

由于这是在Access中编写的,因此处理此文件的子例程中充斥着手动编码的触发器,这些触发器用于处理历史记录,这些历史记录一直以来都是一个让人头疼的问题,我很高兴这一点的原因之一是,它将转移到数据库服务器而不是RAD工具。我正在编写触发器来处理历史记录跟踪

我的计划是/曾经是创建一个对电子表格建模的对象,将数据解析到其中,并在将数据发送到服务器之前使用LINQ在客户端执行一些检查。。。基本上,我需要将工作表中的数据与匹配的记录进行比较(除非不存在任何记录,否则为新记录)。如果任何字段被修改,我想发送更新

最初我希望将这个过程放入某种CLR程序集,该程序集接受IEnumerable列表,因为我已经有了这种形式的电子表格,但最近我了解到这将与一个相当重要的数据库服务器配对,我非常担心它会陷入困境

这是否值得放入一个CLR存储过程?还有其他数据进入的入口点,如果我可以构建一个过程来处理传入的对象,那么我就可以从应用程序中删除大量业务规则,而牺牲潜在的数据库性能

基本上,我希望将更新检查从客户机中移除,并将其放在数据库中,以便数据系统管理表是否应该更新,从而触发历史触发器

如何更好地实现这一目标

本来我想把这个 过程转换为某种CLR 接受IEnumerable的程序集 列表,因为我会有电子表格 已经是这种形式了,但我最近 我知道这是一对 有一个相当重要的数据库 我非常关心的服务器 陷入困境

不起作用。C#编写的CLR过程中的任何输入仍然必须遵循正常的SQL语义。所有可以改变的是内部设置。与客户机的任何通信都必须在SQL中完成。这意味着执行/方法调用。无法直接传入可枚举的对象

本来我想把这个 过程转换为某种CLR 接受IEnumerable的程序集 列表,因为我会有电子表格 已经是这种形式了,但我最近 我知道这是一对 有一个相当重要的数据库 我非常关心的服务器 陷入困境

不起作用。C#编写的CLR过程中的任何输入仍然必须遵循正常的SQL语义。所有可以改变的是内部设置。与客户机的任何通信都必须在SQL中完成。这意味着执行/方法调用。无法直接传入可枚举的对象。

使用。用于读取电子表格,可能使用a检测新项目,最后使用a将缺少的项目流插入SQL

SSIS更适合这种从头开始写东西的工作,不管linq有多有趣。SSIS包比一些带有forgoten源的dll更容易调试、维护和重构。此外,您将无法与SSIS在管理其高槽输出缓冲区方面的改进相匹配

使用。用于读取电子表格,可能使用a检测新项目,最后使用a将缺少的项目流插入SQL

SSIS更适合这种从头开始写东西的工作,不管linq有多有趣。SSIS包比一些带有forgoten源的dll更容易调试、维护和重构。此外,您将无法与SSIS在管理其高槽输出缓冲区方面的改进相匹配

我的计划是创建一个对象 对电子表格进行建模,分析 将数据导入其中,并使用LINQ执行一些操作 在发送前检查客户端 将数据传输到服务器。。。基本上我需要 将工作表中的数据与 匹配记录(除非不存在, 然后是新的)。如果有任何字段 已经更改了,我想发送 更新

您可能需要为您的方法选择一个“中心”,即以数据为中心或以对象为中心

我可能会先对数据进行适当的建模。这是因为关系数据库(甚至关系数据库中表示的非规范化模型)通常比客户机工具/库应用程序寿命长。我可能会开始尝试以一种正常的形式建模,并思考维护审计/历史记录的触发器,正如您在这段时间提到的

我通常会想到输入的数据(实际上不是对象模型或实体)。然后,我将重点放在输入的格式和语义上,看看我的数据模型中是否存在不匹配之处——也许我的数据模型中存在不正确的假设。是的,尽管电子表格是出了名的变化无常的输入源,但我并没有考虑创建一个验证电子表格的对象模型。像Remus一样,我只需要使用SSI将其引入—可能是到一个临时表中,然后再进行一些验证,然后再使用一些T-SQL将其应用到生产表中

然后我会考虑一个客户端工具,它有一个基于我良好的实体数据模型的对象模型