В простейшей форме у вас будет такой контент в вашем 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 vs 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.Если бы я генерировал пакеты, у меня, скорее всего, была бы переменная для моего packageName, поэтому я бы сослался на это и в своем утверждении.
Вариант 2 - лучший способ
Заменить третью строкус использованием библиотеки .NET, как вы видите в heikofritz на с использованием параметров, вставляющих данные в базу данных доступа .
1) Создайте базу данных Соединение 2) Откройте соединение 3) Создайте объект команды и свяжитес соединением 4) Укажите свое утверждение (используйте ?
в качестве порядкового маркера вместо именованных параметров, поскольку это oledb) 5) Создайте список параметров и свяжите его со значениями
Много, много примеров за пределамиссылались, но это был первый удар.Просто игнорируйте строку подключения Access и используйте исходное значение.