public override void Initialize()
{
base.Initialize();
Dictionary<string, string> settings = Settings;
Type measurementType = typeof(IMeasurement);
IEnumerable<string> measurementProperties = GetAllProperties(measurementType).Select(property => property.Name);
StringComparison ignoreCase = StringComparison.CurrentCultureIgnoreCase;
string setting;
// Parse database field names from the connection string.
foreach (string key in settings.Keys)
{
if (key.EndsWith("FieldName", ignoreCase))
{
int fieldNameIndex = key.LastIndexOf("FieldName", ignoreCase);
string subKey = key.Substring(0, fieldNameIndex);
string propertyName = measurementProperties.FirstOrDefault(name => name.Equals(subKey, ignoreCase));
string fieldName = settings[key];
if (propertyName != null)
{
m_fieldNames[fieldName] = propertyName;
m_fieldList.Add(fieldName);
}
else
{
OnProcessException(MessageLevel.Warning, new ArgumentException($"Measurement property not found: {subKey}"));
}
}
}
// If the user hasn't entered any field names, enter the default field names.
if (m_fieldNames.Count == 0)
{
m_fieldNames.Add("TAG", "TagName");
m_fieldNames.Add("TIME", "Timestamp");
m_fieldNames.Add("VALUE", "Value");
}
// Get table name or default to PICOMP.
if (!settings.TryGetValue("tableName", out m_dbTableName))
m_dbTableName = "PICOMP";
// Get database connection string or default to empty.
if (!settings.TryGetValue("dbConnectionString", out m_dbConnectionString))
m_dbConnectionString = string.Empty;
m_isJetEngine = m_dbConnectionString.Contains("Microsoft.Jet.OLEDB");
// Get data provider string or default to a generic ODBC connection.
if (!settings.TryGetValue("dataProviderString", out m_dataProviderString))
m_dataProviderString = "AssemblyName={System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}; ConnectionType=System.Data.Odbc.OdbcConnection; AdapterType=System.Data.Odbc.OdbcDataAdapter";
// Get timestamp format or default to "dd-MMM-yyyy HH:mm:ss.fff".
if (!settings.TryGetValue("timestampFormat", out m_timestampFormat))
m_timestampFormat = "dd-MMM-yyyy HH:mm:ss.fff";
else
{
// Null timestamp format means output as ticks.
if (m_timestampFormat.Equals("null", ignoreCase))
m_timestampFormat = null;
}
// Get bulk insert limit
if (settings.TryGetValue("bulkInsertLimit", out setting))
m_bulkInsertLimit = int.Parse(setting);
else
m_bulkInsertLimit = 1024;
// Create a new database connection object.
Dictionary<string, string> dataProviderSettings = m_dataProviderString.ParseKeyValuePairs();
Assembly assm = Assembly.Load(dataProviderSettings["AssemblyName"]);
Type connectionType = assm.GetType(dataProviderSettings["ConnectionType"]);
m_connection = (IDbConnection)Activator.CreateInstance(connectionType);
m_connection.ConnectionString = m_dbConnectionString;
m_isOracle = m_connection.GetType().Name == "OracleConnection";
}