所以我的任务是研究以前从未做过的事情。
3在VS2010中使用C#构建的应用程序模块使用1个数据库(Database1),其中包含 dbo.Samples 等表,这些表都具有模式“dbo。表 ”。由于某些更高级别的未知原因,已要求将Database1下的所有这些表移动到Database2中,该数据库有更多的模式,如padmin.PSTIF,petro.Facilities,webdc.AppTransactions等。
在这3个模块中,所有连接字符串都是通过 app.config 文件配置的,所有用于显示的数据事务/选择都是通过使用连接字符串的硬编码SQL语句完成的。
我担心的是,如果我将 dbo.Samples 从Database1移动到Database2并将模式更改为 moss.Samples 之类的内容,那么每个编码语句也需要更新?目前我可以编写类似“SELECT * FROM Samples”的代码。我是否必须更改此语句,因为它将使用新模式,即使我将连接字符串更新为Database2?
修改
我将DB1的一些虚拟副本表添加到DB2的测试环境版本,并在应用程序中进行了实验。在将连接字符串更改为现在指向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
,这是有道理的,只是认为值得一试。
答案 0 :(得分:1)
Hi Analytic Lunatic,
您还需要在数据库端采取一些额外的步骤。仅复制数据库不会复制其所有附加信息。触发器,约束,索引和权限不会自动复制到新数据库中。您可能最好使用复制向导。
答案 1 :(得分:0)
你的问题中有很多隐含的问题,潜在的问题和未知数......只有几点:
1)是的,您可以通过多种方式轻松地将数据从一个表移动到另一个表,或两个完全不同的数据库。包括SSIS和"select into"。
2)不,你很少想在生产代码中做“选择*”。
3)是的,可能必须修改访问一个表中一列的任何硬编码语句以访问另一个表中的不同列:)