【发布时间】:2013-10-02 22:31:27
【问题描述】:
所以我的任务是研究我以前从未做过的事情。
在 VS2010 中使用 C# 构建的 3 个应用程序模块正在使用 1 个数据库 (Database1),其中包含 dbo.Samples 等表,这些表都具有架构“dbo.Table ”。出于某些未知原因,已要求将 Database1 下的所有这些表移到 Database2 中,该数据库具有更多模式,例如 padmin.PSTIF、petro.Facilities、webdc.AppTransactions 等。
在这 3 个模块中,所有的连接字符串都是通过 app.config 文件配置的,所有用于显示的数据事务/选择都是通过使用连接字符串的硬编码 SQL 语句完成的。
我担心的是,如果我将 dbo.Samples 从 Database1 移到 Database2 中,并将架构更改为诸如 moss.Samples 之类的东西,那么这些硬-编码语句也需要更新吗?目前我可以编写类似“SELECT * FROM Samples”的代码。我是否必须更改此语句,因为它将使用新架构,即使我将连接字符串更新为 Database2?
编辑:
我在 DB2 的测试环境版本中添加了一些 DB1 的虚拟副本表,并在应用程序中进行了实验。将连接字符串更改为现在指向 DB2 后,我发现我必须遍历每个硬编码 SQL 语句并更改表的每次使用以包含新模式(将 FROM Sample 更改为 FROM moss.Sample)。
有谁知道是否可以在连接字符串本身中指定我希望使用的架构?如果可能的话,这将使我免于在 3 个应用程序中更改大约 200 条单独的语句。
我的示例连接字符串如下:
<connectionStrings>
<add name="conString" connectionString="Data Source=SERVER.domain.state.acroynym.us;Initial Catalog=DatabaseName;Integrated Security=true;"
providerName="System.Data.SqlClient" />
</connectionStrings>
我尝试将Initial Catalog=DatabaseName 更改为Initial Catalog=DatabaseName.moss,但应用程序返回找不到数据库DatabaseName.moss,这是有道理的,只是觉得值得一试。
【问题讨论】:
-
相关 - 请阅读两者以了解为什么你不应该使用
SELECT * FROM Samples: sqlblog.com/blogs/aaron_bertrand/archive/2009/10/10/… sqlblog.com/blogs/aaron_bertrand/archive/2009/10/11/… -
感谢 Aaron 的文章,但为了澄清我以
SELECT * FROM Samples为例。我的真实陈述只返回必要的列。 -
架构前缀文章仍然适用:不要试图找到一些技巧,这样您就可以懒惰地不指定架构。这比一次性迁移的便利性更重要。
-
阅读文章后,我明白了它的重要性。我仍然很好奇,是否可以修改连接字符串以某种方式指向我想要的架构,从而使我无需更改 3 个应用程序中的 200 条硬编码 SQL 语句来获得带有表名的新架构。
-
@AnalyticLunatic 不,连接字符串无法告诉您的应用程序使用
moss而不是dbo。虽然您可以更改应用程序用户(假设是 SQL 身份验证)或所有 Windows 用户的默认架构,但 这不是一件好事。
标签: c# .net sql sql-server visual-studio-2010