我制作了一个“通用”程序,可以将数据从数据库转换为另一个数据库。它使用配置文件来定义转换。它使用这样的代码:
static DbProviderFactory _srcProvFactory;
static DbProviderFactory _trgtProvFactory;
public static bool DoConversions()
{
try
{
if (!InitConfig())
return false;
_srcProvFactory = DbProviderFactories.GetFactory(GetConnectionClassTypeByDatabaseType(Preferences.SourceDatabaseType));
_trgtProvFactory = DbProviderFactories.GetFactory(GetConnectionClassTypeByDatabaseType(Preferences.TargetDatabaseType));
using (DbConnection srcCnctn = _srcProvFactory.CreateConnection(),
trgtCnctn = _trgtProvFactory.CreateConnection())
{
srcCnctn.ConnectionString = Preferences.SourceConnectionString;
srcCnctn.Open();
trgtCnctn.ConnectionString = Preferences.TargetConnectionString;
trgtCnctn.Open();
//DO STUFF
}
}
}
以上GetConnectionClassTypeByDatabaseType方法根据配置文件返回类似“System.Data.OracleClient”的字符串。
DO STUFF部分调用下面的方法(其中有很多)来从模式中找出数据库表列属性。这是必要的,因为Oracle,SQL服务器等处理这些不同。
public static int GetColumnMaxStringLength(DbProviderFactory provFactory, DataRow schemaTableRow)
{
if (provFactory is OracleClientFactory)
{
return Convert.ToInt32(schemaTableRow["LENGTH"]);
}
else if // OTHER OPTIONS
...
throw new Exception(string.Format("Unsupported DbProviderFactory -type: {0}", provFactory.GetType().ToString()));
}
那么当构建说这些类已经过时时,应该如何修复它?当我这样做时,这被认为是一种教科书解决方案(Pro C#2008和 .NET 3.5平台)。现在我感到很困惑。
提前致谢&最诚挚的问候 - 马蒂