直接用 Rhino.Etl 调试后,发现我犯了两个错误:
应ConnectionStringSettings
包括. providerName
RhinoETL 对此抛出了异常,但不知何故我无法看到它
var csString = new ConnectionStringSettings("myConnection2",
"Server=yourdatabasehere.database.windows.net;Database=MyDbName;User ID=youruser;Password=yourpassword",
"System.Data.SqlClient"); //I was missing this.
Register(new ReadBuildInfosConvention(csString));
作者的博客是完整的。Execute
方法不应该被覆盖。SQL 阅读器很简单,如下所示:
public class ReadBuildInfosConvention : ConventionInputCommandOperation
{
public ReadBuildInfosConvention(ConnectionStringSettings csSettings) : base(csSettings)
{
Command = "SELECT [Key], [Value] FROM BuildInfos WITH (NOLOCK);";
}
}
因为基本Execute
方法已经适当地处理了 DB Read
public override IEnumerable<Row> Execute(IEnumerable<Row> rows)
{
using (IDbConnection connection = Use.Connection(ConnectionStringSettings))
using (IDbTransaction transaction = BeginTransaction(connection))
{
using (currentCommand = connection.CreateCommand())
{
currentCommand.Transaction = transaction;
PrepareCommand(currentCommand);
using (IDataReader reader = currentCommand.ExecuteReader())
{
while (reader.Read())
{
yield return CreateRowFromReader(reader);
}
}
}
if (transaction != null) transaction.Commit();
}
}
这是一个带有 logging 的有效 VS 解决方案。