我有一个现有的SQL Server数据库,虽然我可以根据需要添加存储过程或新表,但我不能真正更改其结构。我必须编写一个独立的程序来访问数据库,处理数据并生成一些报告。我选择了C#和Visual Studio,因为我们几乎就是一个微软商店。
我已经开始探索使用VS2008来创建上述程序。我正在试着决定把一些SQL逻辑放在哪里。我的主要目标是使开发尽可能简单,并快速执行。
我是否应该将SQL逻辑放到一个存储过程中,然后简单地调用该存储过程,让SQL Server执行繁重的工作并将结果交给我?或者,我最好将SQL查询保存在代码中,创建相应的命令并对SQL Server执行它?
我感觉前者的性能可能会更好,但我必须将存储过程与我的代码库的其余部分分开管理,不是吗?
更新:有人指出,如果在C#程序或存储过程中使用相同的SQL代码,性能应该是相同的。如果是这样的话,哪一个是最容易维护的?
2009年10月02日:我不得不认真考虑该选择哪一个答案。在撰写本文时,有8个答案,基本上分为5-3个,支持将SQL逻辑放在应用程序中。另一方面,有11票赞成,9票赞成,2票反对,支持将SQL逻辑放在存储过程中(以及几个关于这种方式的警告)。所以我很纠结。最后,我还是会投更高的票。但是,如果我遇到麻烦,我会回来更改我选择的答案:)
发布于 2009-09-28 10:29:48
如果是繁重的数据操作,请将其保存在存储过程中的数据库中。如果查询可能会更改一些,则更好的位置也应该在数据库中,否则可能需要对每个更改进行重新部署。
发布于 2009-09-28 12:29:07
将主要工作保留在存储过程中具有灵活性的优势-我发现修改过程比实现程序更改更容易。不幸的是,灵活性是一把双刃剑;它也更容易做出不明智的更改。
发布于 2009-09-28 10:30:46
我建议看一看LINQ to Entities,它为任何SQL语句(CRUD)提供了一个对象关系映射包装器( Object Relational Mapping wrapper ),抽象出写入数据库所需的逻辑,并允许您编写OO代码,而不是使用SQLConnections和SQLCommands。
OO代码( save方法不存在,但您得到了它的要点):
// this adds a new car to the Car table in SQL, without using ANY SQL code
Car car = new Car();
Car.BrandName = "Audi";
Car.Save(); //save is called something else and is on the
// datacontext the car is in, but for brevity sake..SqlCommand中的字符串形式的SQL代码:
// open sql connection in your app and
// create Command that inserts car
SqlConnection conn = new SqlConnection(connstring);
SQlCommand comm = new SqlCommand("INSERT INTO CAR...");
// executehttps://stackoverflow.com/questions/1486342
复制相似问题