В простейшей форме у вас будет такой контент в вашем скрипте Biml.
// Define the connection string to our database
string connectionStringSource = @"Server=localhost\dev2012;Initial Catalog=AdventureWorksDW2012;Integrated Security=SSPI;Provider=SQLNCLI11.1";
// Define the query to be run after *ish* expansion
string SrcTableQuery = @"INSERT INTO dbo.MyTable (BuildDate) SELECT GETDATE()";
// Run our query, nothing populates the data table
DataTable dt = ExternalDataAccess.GetDataTable(connectionStringSource, SrcTableQuery);
Это можно сделать множеством различных способов — вы могли бы запустить свой собственный диспетчер соединений OLE/ADO и использовать методы класса. Вы могли бы получить строку подключения из коллекции Biml Connections (в зависимости от уровня, на котором она выполняется) и т. д.
Предостережения
В зависимости от продукта (BimlStudio или BimlExpress) может выполняться фоновый процесс компиляции вашего BimlScript, чтобы убедиться, что все метаданные готовы для того, чтобы IntelliSense могла их подобрать. Возможно, вам придется спрятать эту логику в очень многоуровневый файл Biml, чтобы он вызывался только тогда, когда вы к этому готовы. например
<#@ template tier="999" #>
<#
// Define the connection string to our database
string connectionStringSource = @"Server=localhost\dev2012;Initial Catalog=AdventureWorksDW2012;Integrated Security=SSPI;Provider=SQLNCLI11.1";
// Define the query to be run after *ish* expansion
string SrcTableQuery = @"INSERT INTO dbo.MyTable (BuildDate) SELECT GETDATE()";
// Run our query, nothing populates the data table
DataTable dt = ExternalDataAccess.GetDataTable(connectionStringSource, SrcTableQuery);
#>
Это проблема, которую вы пытаетесь решить?
Ответы на комментарии/вопросы
Учитывая запрос
string SrcTablequery=@"INSERT INTO BIML_audit (audit_id,Package,audit_Logtime) VALUES (@audit_id, @Package,@audit_Logtime)";
он выдает ошибку из-за того, что @audit_id не указан. Что имеет смысл - этот запрос указывает, что он предоставит три переменные, и ни одна из них не предоставлена.
Вариант 1 - ленивый способ
Самым быстрым решением было бы переопределить ваш запрос следующим образом.
string SrcTablequery=string.Format(@"INSERT INTO BIML_audit (audit_id,Package,audit_Logtime) VALUES ({0}, '{1}', '{2})'", 123, "MyPackageName", DateTime.Now);
Я использую метод Format библиотеки строк, чтобы ввести фактические значения в заполнители. Я предполагаю, что audit_id — это число, а два других — строки, поэтому галочки окружают 1 и 2. Вам нужно будет определить значение для вашего идентификатора аудита, но я вставил 123 в качестве примера. Если бы я создавал пакеты, у меня, вероятно, была бы переменная для имени моего пакета, поэтому я бы также ссылался на нее в своем заявлении.
Вариант 2 - лучший способ
Замените третью строку на использование библиотеки .NET так же, как вы видите в heikofritz на использование параметров вставка данных в базу данных доступа.
1) Создайте соединение с базой данных 2) Откройте соединение 3) Создайте объект команды и свяжите его с соединением 4) Укажите свой оператор (используйте ?
в качестве порядкового маркера вместо именованных параметров, поскольку это oledb) 5) Создайте список параметров и свяжите со значениями
Много, много примеров, помимо упомянутых, но это был первый хит. Просто игнорируйте строку подключения Access и используйте исходное значение.
person
billinkc
schedule
19.06.2019