private int GetVersionTableNumber(string databaseInfo, bool isDesktop) { if (isDesktop) { return(0); } int version = 0; using (IRepository repository = RepoHelper.CreateRepository(databaseInfo)) { var list = repository.GetAllTableNames(); if (list.Contains("__VERSION")) { System.Data.DataSet ds = repository.ExecuteSql(@" SELECT MAX([SchemaVersion]) FROM __VERSION; GO"); if (ds != null && ds.Tables.Count > 0) { version = int.Parse(ds.Tables[0].Rows[0][0].ToString()); } repository.ExecuteSql(@" DROP TABLE [__VERSION]; GO"); } } return(version); }
public async Task <bool> Handle(AsyncExchangeRateCommand request, CancellationToken cancellationToken) { Rates RatesInfo = null; using (WebClient web = new WebClient()) { RatesInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <Rates>(web.DownloadString("https://api.exchangerate-api.com/v4/latest/USD")); } try { _exchangeRateRepository.ExecuteSql("delete from ExchangeRate where 1 = 1 "); foreach (var r in RatesInfo.rates) { var rate = new ExchangeRate { CurrencyCode = r.Key, ToUSD = r.Value }; _exchangeRateRepository.Add(rate); } } catch (Exception ex) { throw new Exception(ex.Message); } return(await _unitOfWork.CommitAsync()); }
public List <DbDescription> GetDescriptions(DatabaseInfo databaseInfo) { var list = new List <DbDescription>(); using (IRepository repo = DataConnectionHelper.CreateRepository(databaseInfo)) { var tlist = repo.GetAllTableNames(); if (tlist.Contains(TableName)) { var ds = repo.ExecuteSql(SelectScript); if (ds.Tables.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { var dbDesc = new DbDescription(); dbDesc.Object = row[0] == DBNull.Value ? null : row[0].ToString(); dbDesc.Parent = row[1] == DBNull.Value ? null : row[1].ToString(); dbDesc.Description = row[2] == DBNull.Value ? null : row[2].ToString(); list.Add(dbDesc); } } } } return(list); }
/// <summary> /// 使用sql语句 /// </summary> /// <param name="sql"></param> /// <returns></returns> public virtual int ExecuteSqlWithNonQuery(string sql) { int result = 0; result = Repository.ExecuteSql(sql); return(result); }
private static string CreateStore(DatabaseType storeDbType) { string fileName = GetStoreName(storeDbType); string connString = string.Format("Data Source={0};", fileName); if (!File.Exists(fileName)) { if (storeDbType == DatabaseType.SQLite) { var helper = RepositoryHelper.CreateEngineHelper(storeDbType); helper.CreateDatabase(connString); } else { var sdf = Resources.SqlCe35AddinStore; if (storeDbType == DatabaseType.SQLCE40) { sdf = Resources.SqlCe40AddinStore; } using (Stream stream = new MemoryStream(sdf)) { // Create a FileStream object to write a stream to a file using (FileStream fileStream = File.Create(fileName, (int)stream.Length)) { // Fill the bytes[] array with the stream data byte[] bytesInStream = new byte[stream.Length]; stream.Read(bytesInStream, 0, bytesInStream.Length); // Use FileStream object to write to the specified file fileStream.Write(bytesInStream, 0, bytesInStream.Length); } } } } var dbInfo = new DatabaseInfo { DatabaseType = storeDbType, ConnectionString = connString }; using (IRepository repository = Helpers.RepositoryHelper.CreateRepository(dbInfo)) { var tables = repository.GetAllTableNames(); if (!tables.Contains("Databases")) { var script = "CREATE TABLE Databases (Id INT IDENTITY, Source nvarchar(2048) NOT NULL, FileName nvarchar(512) NOT NULL, CeVersion int NOT NULL)" + separator; if (storeDbType == DatabaseType.SQLite) { script = "CREATE TABLE Databases (Id INTEGER PRIMARY KEY, Source nvarchar(2048) NOT NULL, FileName nvarchar(512) NOT NULL, CeVersion int NOT NULL)" + separator; } repository.ExecuteSql(script); } } return(connString); }
private static void CreateExtPropsTable(IRepository repo) { var list = repo.GetAllTableNames(); if (!list.Contains(TableName)) { repo.ExecuteSql(CreateScript); } }
private async Task SaveNewCategories(IEnumerable <AppCategoryModel> newCategories) { //ef can manage many to many relationships only when changes are tracked, we don't track changes, so drop to raw sql var insertCategoriesSQL = @"INSERT INTO [AppCategories] (Name) VALUES({0})"; var insertAppCategoriesSQL = @"INSERT INTO [ApplicationCategories] VALUES({0},{1})"; foreach (var cat in newCategories) { await repository.ExecuteSql(insertCategoriesSQL, cat.Name); var newCat = await repository.GetSingleAsync <AppCategory>(c => c.Name == cat.Name); foreach (var app in cat.ObservableApplications) { await repository.ExecuteSql(insertAppCategoriesSQL, app.ApplicationID, newCat.ID); } } }
public void ReportTableData(object sender, ExecutedRoutedEventArgs e) { string sqlText; var menuItem = sender as MenuItem; var ds = new DataSet(); if (menuItem == null) { return; } var menuInfo = menuItem.CommandParameter as MenuCommandParameters; if (menuInfo == null) { return; } try { using (IRepository repository = DataConnectionHelper.CreateRepository(menuInfo.DatabaseInfo)) { sqlText = string.Format(Environment.NewLine + "SELECT * FROM [{0}]", menuInfo.Name) + Environment.NewLine + "GO"; ds = repository.ExecuteSql(sqlText); } var pkg = ParentWindow.Package as SqlCeToolboxPackage; Debug.Assert(pkg != null, "Package property of the Explorere Tool Window should never be null, have you tried to create it manually and not through FindToolWindow()?"); string dbName = System.IO.Path.GetFileNameWithoutExtension(menuInfo.DatabaseInfo.Caption); if (dbName != null) { var window = pkg.CreateWindow <ReportWindow>(Math.Abs(menuInfo.Name.GetHashCode() - dbName.GetHashCode())); window.Caption = menuInfo.Name + " (" + dbName + ")"; pkg.ShowWindow(window); var control = window.Content as ReportControl; if (control != null) { control.DatabaseInfo = menuInfo.DatabaseInfo; control.TableName = menuInfo.Name; control.DataSet = ds; control.ShowReport(); } } DataConnectionHelper.LogUsage("ViewReport"); } catch (System.IO.FileNotFoundException) { EnvDteHelper.ShowError("Microsoft Report Viewer 2010 not installed, please download and install to use this feature http://www.microsoft.com/en-us/download/details.aspx?id=6442"); return; } catch (Exception ex) { DataConnectionHelper.SendError(ex, menuInfo.DatabaseInfo.DatabaseType, false); } ds.Dispose(); }
private void UpdateDescription(string description, string parentName, string objectName, DatabaseInfo databaseInfo) { if (string.IsNullOrWhiteSpace(description)) { return; } description = description.Replace("'", "''"); using (IRepository repo = DataConnectionHelper.CreateRepository(databaseInfo)) { string where = (objectName == null ? "[ObjectName] IS NULL AND " : "[ObjectName] = '" + objectName + "' AND"); where += (parentName == null ? "[ParentName] IS NULL AND [Type] = 0" : "[ParentName] = '" + parentName + "' AND [Type] = 0"); repo.ExecuteSql(string.Format(UpdateScript, description, where)); } }
/// <summary> /// This will only be called if the caller (the tree list) knows that the table exists /// </summary> /// <param name="databaseInfo"></param> /// <returns></returns> private string GetDescription(string parentName, string objectName, string connectionString) { string res = string.Empty; using (IRepository repo = RepoHelper.CreateRepository(connectionString)) { string where = (objectName == null ? "[ObjectName] IS NULL" : "[ObjectName] = '" + objectName + "' AND"); where += (parentName == null ? "[ParentName] IS NULL" : "[ParentName] = '" + parentName + "' AND [Type] = 0"); var ds = repo.ExecuteSql(string.Format(selectSingleScript, where)); if (ds.Tables.Count > 0) { return(ds.Tables[0].Rows[0][0].ToString()); } } return(res); }
internal static Dictionary <string, DatabaseInfo> GetOwnDataConnections() { Dictionary <string, DatabaseInfo> databaseList = new Dictionary <string, DatabaseInfo>(); DatabaseType dbType = GetPreferredDatabaseType(); DatabaseInfo dbInfo = new DatabaseInfo { ConnectionString = CreateStore(dbType), DatabaseType = dbType }; using (IRepository repository = CreateRepository(dbInfo)) { string script = "SELECT FileName, Source, CeVersion FROM Databases" + separator; var dataset = repository.ExecuteSql(script); foreach (DataRow row in dataset.Tables[0].Rows) { string key = row[1].ToString(); DatabaseType type = (DatabaseType)int.Parse(row[2].ToString()); var info = new DatabaseInfo(); try { info.Caption = Path.GetFileName(row[0].ToString()); } catch (ArgumentException) { info.Caption = row[0].ToString(); } info.DatabaseType = type; info.FromServerExplorer = false; info.ConnectionString = key; info.ServerVersion = "4.0.0.0"; if (type == DatabaseType.SQLCE35) { info.ServerVersion = "3.5.1.0"; } if (type == DatabaseType.SQLite) { //TODO Update this when SQLite provider is updated! info.ServerVersion = "3.15"; } info.FileIsMissing = IsMissing(info); if (!databaseList.ContainsKey(key)) { databaseList.Add(key, info); } } } return(databaseList); }
private void AddDescription(string description, string parentName, string objectName, DatabaseInfo databaseInfo) { if (string.IsNullOrWhiteSpace(description)) { return; } using (IRepository repo = DataConnectionHelper.CreateRepository(databaseInfo)) { CreateExtPropsTable(repo); string sql = string.Format(InsertScript, (parentName == null ? "NULL" : "'" + parentName + "'"), (objectName == null ? "NULL" : "'" + objectName + "'"), description.Replace("'", "''")); repo.ExecuteSql(sql); } }
private static void AddRowVersionColumns(DatabaseMenuCommandParameters databaseInfo) { using (IRepository repository = RepoHelper.CreateRepository(databaseInfo.Connectionstring)) { var list = repository.GetAllTableNames(); var allColumns = repository.GetAllColumns(); foreach (var table in list) { if (!table.StartsWith("__")) { var rowVersionCol = allColumns.Where(c => c.TableName == table && c.DataType == "rowversion").SingleOrDefault(); if (rowVersionCol == null) { repository.ExecuteSql(string.Format("ALTER TABLE {0} ADD COLUMN VersionColumn rowversion NOT NULL;{1}GO", table, Environment.NewLine)); } } } } }
public List<DbDescription> GetDescriptions(IRepository repository) { var list = new List<DbDescription>(); string res = string.Empty; var tlist = repository.GetAllTableNames(); if (tlist.Contains(tableName)) { var ds = repository.ExecuteSql(selectScript); if (ds.Tables.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { var dbDesc = new DbDescription(); dbDesc.Object = row[0] == DBNull.Value ? null : row[0].ToString(); dbDesc.Parent = row[1] == DBNull.Value ? null : row[1].ToString(); dbDesc.Description = row[2] == DBNull.Value ? null : row[2].ToString(); list.Add(dbDesc); } } } return list; }
public ApiResponse <UserModel> GetUsersFromRepository(int?userId) { var response = new ApiResponse <UserModel>(); try { object[] paramList = { new SqlParameter("UserId", (object)userId ?? DBNull.Value), }; var result = _repository.ExecuteSql <UserModel>("usp_UserMaster_GetUsersFromRepository", paramList).ToList(); response.Data = result; response.Success = true; } catch (Exception ex) { response.Message.Add(ex.Message); } return(response); }
public List <DbDescription> GetDescriptions(IRepository repository) { var list = new List <DbDescription>(); string res = string.Empty; var tlist = repository.GetAllTableNames(); if (tlist.Contains(tableName)) { var ds = repository.ExecuteSql(selectScript); if (ds.Tables.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { var dbDesc = new DbDescription(); dbDesc.Object = row[0] == DBNull.Value ? null : row[0].ToString(); dbDesc.Parent = row[1] == DBNull.Value ? null : row[1].ToString(); dbDesc.Description = row[2] == DBNull.Value ? null : row[2].ToString(); list.Add(dbDesc); } } } return(list); }
/// <summary> /// 执行Sql语句 /// </summary> /// <param name="sql">Sql语句</param> public int ExecuteSql(string sql) { return(Service.ExecuteSql(sql)); }
public void GenerateDataContext(object sender, ExecutedRoutedEventArgs e) { var databaseInfo = ValidateMenuInfo(sender); if (databaseInfo == null) { return; } bool isDesktop = false; if ((bool)((MenuItem)sender).Tag == true) { isDesktop = true; } SqlCeHelper helper = new SqlCeHelper(); if (!helper.IsV35DbProviderInstalled()) { MessageBox.Show("This feature requires the SQL Server Compact 3.5 SP2 runtime & DbProvider to be installed"); return; } string sqlMetalPath = (string)Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools", "InstallationFolder", null); if (string.IsNullOrEmpty(sqlMetalPath)) { sqlMetalPath = (string)Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A", "InstallationFolder", string.Empty) + "bin\\NETFX 4.0 Tools\\"; if (string.IsNullOrEmpty(sqlMetalPath)) { MessageBox.Show("Could not find SQLMetal location in registry"); return; } } sqlMetalPath = Path.Combine(sqlMetalPath, "sqlmetal.exe"); if (!File.Exists(sqlMetalPath)) { MessageBox.Show("Could not find SqlMetal in the expected location: " + sqlMetalPath); return; } string sdfFileName = string.Empty; string fileName = string.Empty; SaveFileDialog fd = new SaveFileDialog(); fd.Title = "Save Data Context as"; fd.Filter = "C# code (*.cs)|*.cs|VB code|*.vb"; fd.OverwritePrompt = true; fd.ValidateNames = true; bool?fdresult = fd.ShowDialog(); if (fdresult.HasValue && fdresult.Value == true) { fileName = fd.FileName; } if (string.IsNullOrEmpty(fileName)) { return; } try { using (IRepository repository = RepoHelper.CreateRepository(databaseInfo.Connectionstring)) { var tables = repository.GetAllTableNames(); var pks = repository.GetAllPrimaryKeys(); string checkedTables = string.Empty; foreach (string tableName in tables) { var pk = pks.Where(k => k.TableName == tableName).FirstOrDefault(); if (pk.TableName == null) { checkedTables += tableName + Environment.NewLine; } } if (!string.IsNullOrEmpty(checkedTables)) { string message = string.Format("The tables below do not have Primary Keys defined,{0}and will not be generated properly:{1}{2}", Environment.NewLine, Environment.NewLine, checkedTables); MessageBox.Show(message); } List <KeyValuePair <string, string> > dbInfo = repository.GetDatabaseInfo(); foreach (var kvp in dbInfo) { if (kvp.Key == "Database") { sdfFileName = kvp.Value; break; } } sdfFileName = Path.GetFileName(sdfFileName); } string model = Path.GetFileNameWithoutExtension(databaseInfo.Caption).Replace(" ", string.Empty).Replace("#", string.Empty).Replace(".", string.Empty).Replace("-", string.Empty); model = model + "Context"; DataContextDialog dcDialog = new DataContextDialog(); dcDialog.ModelName = model; dcDialog.IsDesktop = isDesktop; dcDialog.NameSpace = string.Empty; dcDialog.CodeLanguage = "C#"; bool?result = dcDialog.ShowDialog(); if (result.HasValue && result.Value == true && (!string.IsNullOrWhiteSpace(dcDialog.ModelName))) { if (dcDialog.AddRowversionColumns) { AddRowVersionColumns(databaseInfo); } string sdfPath = databaseInfo.Connectionstring; #if V35 #else //If version 4.0, create a 3.5 schema sdf, and use that as connection string if (isDesktop) { var tempFile = Path.GetTempFileName(); using (IRepository repository = RepoHelper.CreateRepository(databaseInfo.Connectionstring)) { var generator = RepoHelper.CreateGenerator(repository, tempFile); generator.ScriptDatabaseToFile(Scope.Schema); } sdfPath = Path.Combine(Path.GetTempPath(), sdfFileName); if (File.Exists(sdfPath)) { File.Delete(sdfPath); } sdfPath = "Data Source=" + sdfPath; helper.CreateDatabase(sdfPath); using (IRepository repository = new DBRepository(sdfPath)) { string script = File.ReadAllText(tempFile); repository.ExecuteSql(script); } } #endif int versionNumber = GetVersionTableNumber(databaseInfo.Connectionstring, isDesktop); model = dcDialog.ModelName; string dcPath = fileName; string parameters = " /provider:SQLCompact /code:\"" + dcPath + "\""; parameters += " /conn:\"" + sdfPath + "\""; parameters += " /context:" + model; if (dcDialog.Pluralize) { parameters += " /pluralize"; } if (!string.IsNullOrWhiteSpace(dcDialog.NameSpace)) { parameters += " /namespace:" + dcDialog.NameSpace; } var dcH = new ErikEJ.SqlCeScripting.DataContextHelper(); string sqlmetalResult = dcH.RunSqlMetal(sqlMetalPath, parameters); if (!File.Exists(dcPath)) { MessageBox.Show("Error during SQL Metal run: " + sqlmetalResult); return; } if (!isDesktop) { using (IRepository repository = RepoHelper.CreateRepository(databaseInfo.Connectionstring)) { if (dcDialog.CodeLanguage == "VB") { DataContextHelper.FixDataContextVB(dcPath, model, dcDialog.NameSpace, sdfFileName, repository); } else { DataContextHelper.FixDataContextCS(dcPath, model, dcDialog.NameSpace, sdfFileName, repository); } } } // Creates __Version table and adds one row if desired if (!isDesktop && dcDialog.AddVersionTable) { using (IRepository repository = RepoHelper.CreateRepository(databaseInfo.Connectionstring)) { var list = repository.GetAllTableNames(); if (!list.Contains("__VERSION")) { repository.ExecuteSql(string.Format(@" CREATE TABLE [__VERSION] ( [SchemaVersion] int NOT NULL , [DateUpdated] datetime NOT NULL DEFAULT (GETDATE()) ); GO CREATE INDEX [IX_SchemaVersion] ON [__VERSION] ([SchemaVersion] DESC); GO INSERT INTO [__VERSION] ([SchemaVersion]) VALUES ({0}); GO", versionNumber)); } } } MessageBox.Show("DataContext class successfully created"); } } catch (Exception ex) { MessageBox.Show(Helpers.DataConnectionHelper.ShowErrors(ex)); } }
public void ExecuteSql(string sql) => _commonRepository.ExecuteSql(sql);
public void DistributedTransaction() { //失败事务 IRepository _db1 = DbFactory.GetRepository("DataSource=db.db", DatabaseType.SQLite); IRepository _db2 = DbFactory.GetRepository("DataSource=db2.db", DatabaseType.SQLite); _db1.DeleteAll <Base_UnitTest>(); _db2.DeleteAll <Base_UnitTest>(); Base_UnitTest data1 = new Base_UnitTest { Id = Guid.NewGuid().ToString(), UserId = "1", UserName = Guid.NewGuid().ToString() }; Base_UnitTest data2 = new Base_UnitTest { Id = data1.Id, UserId = "1", UserName = Guid.NewGuid().ToString() }; Base_UnitTest data3 = new Base_UnitTest { Id = Guid.NewGuid().ToString(), UserId = "2", UserName = Guid.NewGuid().ToString() }; new Action(() => { var transaction = DistributedTransactionFactory.GetDistributedTransaction(); transaction.AddRepository(_db1, _db2); var succcess = transaction.RunTransaction(() => { _db1.ExecuteSql("insert into Base_UnitTest(Id) values('10') "); _db1.Insert(data1); _db1.Insert(data2); _db2.Insert(data1); _db2.Insert(data3); }); Assert.IsFalse(succcess.Success); Assert.AreEqual(0, _db1.GetIQueryable <Base_UnitTest>().Count()); Assert.AreEqual(0, _db2.GetIQueryable <Base_UnitTest>().Count()); })(); //成功事务 new Action(() => { var transaction = DistributedTransactionFactory.GetDistributedTransaction(); transaction.AddRepository(_db1, _db2); var succcess = transaction .RunTransaction(() => { _db1.ExecuteSql("insert into Base_UnitTest(Id) values('10') "); _db1.Insert(data1); _db1.Insert(data3); _db2.Insert(data1); _db2.Insert(data3); }); int count1 = _db1.GetIQueryable <Base_UnitTest>().Count(); int count2 = _db2.GetIQueryable <Base_UnitTest>().Count(); Assert.IsTrue(succcess.Success); Assert.AreEqual(3, count1); Assert.AreEqual(2, count2); })(); }
private static void CreateExtPropsTable(IRepository repo) { var list = repo.GetAllTableNames(); if (!list.Contains(tableName)) repo.ExecuteSql(createScript); }
public void DistributedTransactionTest() { //失败事务 IRepository _bus1 = DbFactory.GetRepository(); IRepository _bus2 = DbFactory.GetRepository("BaseDb_Test"); _bus1.DeleteAll <Base_UnitTest>(); _bus2.DeleteAll <Base_UnitTest>(); Base_UnitTest data1 = new Base_UnitTest { Id = Guid.NewGuid().ToString(), UserId = "1", UserName = Guid.NewGuid().ToString() }; Base_UnitTest data2 = new Base_UnitTest { Id = data1.Id, UserId = "1", UserName = Guid.NewGuid().ToString() }; Base_UnitTest data3 = new Base_UnitTest { Id = Guid.NewGuid().ToString(), UserId = "2", UserName = Guid.NewGuid().ToString() }; new Action(() => { var succcess = DistributedTransactionFactory.GetDistributedTransaction(_bus1, _bus2) .RunTransaction(() => { _bus1.ExecuteSql("insert into Base_UnitTest(Id) values('10') "); _bus1.Insert(data1); _bus1.Insert(data2); _bus2.Insert(data1); _bus2.Insert(data3); }); Assert.AreEqual(succcess.Success, false); Assert.AreEqual(_bus1.GetIQueryable <Base_UnitTest>().Count(), 0); Assert.AreEqual(_bus2.GetIQueryable <Base_UnitTest>().Count(), 0); })(); //成功事务 new Action(() => { var succcess = DistributedTransactionFactory.GetDistributedTransaction(_bus1, _bus2) .RunTransaction(() => { _bus1.ExecuteSql("insert into Base_UnitTest(Id) values('10') "); _bus1.Insert(data1); _bus1.Insert(data3); _bus2.Insert(data1); _bus2.Insert(data3); }); int count1 = _bus1.GetIQueryable <Base_UnitTest>().Count(); int count2 = _bus2.GetIQueryable <Base_UnitTest>().Count(); Assert.AreEqual(succcess.Success, true); Assert.AreEqual(count1, 3); Assert.AreEqual(count2, 2); })(); }
/// <summary> /// 执行Sql语句 /// </summary> /// <param name="sql">Sql语句</param> public void ExecuteSql(string sql) { Service.ExecuteSql(sql); }
public void SpawnReportViewerWindow(object sender, ExecutedRoutedEventArgs e) { try { var menuItem = sender as MenuItem; if (menuItem == null) { return; } var menuInfo = menuItem.CommandParameter as MenuCommandParameters; if (menuInfo == null) { return; } WindowsFormsHost wh = new WindowsFormsHost(); ReportGrid rg = new ReportGrid(); DataSet ds; using (IRepository repository = RepoHelper.CreateRepository(menuInfo.Connectionstring)) { var generator = RepoHelper.CreateGenerator(repository); generator.GenerateTableSelect(menuInfo.Name); var sqlText = generator.GeneratedScript; ds = repository.ExecuteSql(sqlText); } rg.DataSet = ds; rg.TableName = menuInfo.Name; wh.Child = rg; string tabTitle = System.IO.Path.GetFileNameWithoutExtension(menuInfo.Caption) + "-" + menuInfo.Name + "-Report"; bool alreadyThere = false; int i = -1; foreach (var item in _parent.FabTab.Items) { i++; if (item is FabTabItem) { FabTabItem ftItem = (FabTabItem)item; if (ftItem.Header.ToString() == tabTitle) { alreadyThere = true; } } } if (alreadyThere) { _parent.FabTab.SelectedIndex = i; _parent.FabTab.Focus(); } else { FabTabItem tab = new FabTabItem(); tab.Content = wh; tab.Header = tabTitle; _parent.FabTab.Items.Add(tab); _parent.FabTab.SelectedIndex = _parent.FabTab.Items.Count - 1; rg.Focus(); } } catch (System.IO.FileNotFoundException) { MessageBox.Show("Microsoft Report Viewer 2010 not installed, please download and install to use this feature http://www.microsoft.com/en-us/download/details.aspx?id=6442"); } catch (Exception ex) { MessageBox.Show(DataConnectionHelper.ShowErrors(ex)); } }