Office 2013 become much more smart and packed with lot of features, at the same time switching between the version always has some learning curve. Recently we spend few minute in searching the insert object option in 2013.
In Office 2010
Office 2013 become much more smart and packed with lot of features, at the same time switching between the version always has some learning curve. Recently we spend few minute in searching the insert object option in 2013.
In Office 2010
Many time you may need to get list of values from a database table and form a concatenated string (Comma separated). I see still some programmer use cursor to do that. we have simple technique to achieve this.
DECLARE @T VARCHAR(MAX)
SET @T = ''
SELECT @T = @T + COLUMN_NAME + ', '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Metadata' AND TABLE_SCHEMA = 'DBO'
SELECT @T
The @T variable will hold all row values separated by comma.
Recently a new learner of C# asked me a question on C# Virtual & Abstract properties. It turned out to a deep dive. Detail follows.
Difference between the Abstract and Virtual property
* Abstract properties forces you to make the class abstract,
no such constraint for virtual properties. Virtual provides
an offer to subclass to override.
* Abstract properties defer the implementation to subclass.
In Virtual property a default implementation can be provided..
Let us deep dive on write only virtual property
-------------------------------------------------------------
To make a property as write only
Option 1: You can mark the getter as private
public virtual string Prop1 { set; private get; }
Option 2: You can just have setter
> in case of explicit implemented properties,
it is legal to just have Setter
/////////////////////////////////////////////////////
string Field;
public virtual string Prop1 { set { Field = value; } }
/////////////////////////////////////////////////////
> in case of Automatically implemented properties, you must have getter
because if you have just the setter, there is no way you can
access the value. (Check compiler error below)
/////////////////////////////////////////////////////
public virtual string Prop1 { set; }
/////////////////////////////////////////////////////
Error:
'ConsoleApplication1.test.MyVirtaulWriteOnlyProperty1.set' must declare a body
because it is not marked abstract or extern. Automatically implemented properties
must define both get and set accessors.
Detail:
So for virtual write only property, you must explicitly have setter implemented.
if you are using Automatically implemented property it must have both get & set
In contrary write only abstract property allows setter only property.
It is because, in abstract the implementation is deferred, in the subclass
the compiler will force you to implement the setter explicitly in subclass.
/////////////////////////////////////////////////////
abstract class Animal
{
public abstract string Prop1 { set; }
}
/////////////////////////////////////////////////////
Attempt - 1
/////////////////////////////////////////////////////
public class Dog : Animal
{
public override string Prop1 {set;}
}
/////////////////////////////////////////////////////
Errror
'ConsoleApplication1.Dog.Prop1.set' must declare a body
because it is not marked abstract or extern.
Automatically implemented properties must define both get and set accessors.
Detail:
The reason is there is no way you can read the value,
so compiler forces us to add both get, set.
Attempt - 2
/////////////////////////////////////////////////////
public class Dog : Animal
{
public override string Prop1 {get;set;}
}
/////////////////////////////////////////////////////
Error:
'ConsoleApplication1.Dog.Prop1.get': cannot override
because 'ConsoleApplication1.Animal.Prop1'
does not have an overridable get accessor
Detail:
There is no getter defined in suberclass, so we cannot define it in subclass.
We cannot change the write only property as read/write property in subclass
Attempt - 3: (Correct implementation)
/////////////////////////////////////////////////////
public class Dog : Animal
{
string field;
public override string Prop1
{
set { field = value; }
}
}
/////////////////////////////////////////////////////
Error: None
Detail:
So the only way out is implement the Write only property as write only explicitly.
I hope this helps to understand the write only property behavior in reference to Abstract & Virtual.
Check out the large collection of Free Microsoft eBooks for you, including: SharePoint, Visual Studio, Windows Phone, Windows 8, Office 365, Office 2010, SQL Server 2012, Azure, and more.
http://blogs.msdn.com/b/mssmallbiz/archive/2012/07/27/large-collection-of-free-microsoft-ebooks-for-you-including-sharepoint-visual-studio-windows-phone-windows-8-office-365-office-2010-sql-server-2012-azure-and-more.aspx
The windows application development is keep evolving. The day from FoxPro, Visual FoxPro, Visual Basic, .Net WinForms, WPF.
Now it is big move for Windows 8. The decade old typical windows app style is replaced with metro style. The OS API are evolved, the world is more connected, the UI interfaces evolved, the devices are evolved. Windows OS is embracing major change in Windows 8.
The transition is trend change and requires completely different approach. Getting started with Windows 8 needs solid understanding. Here is the complete training available from Channel 9.
There are times where you may need to generate Assembly dynamically at run-time. The blog post shares some code for the same.
public CompilerResults Compile()
{
//Set the compiler options
var compilerOptions = new Dictionary<string, string>();
compilerOptions.Add("CompilerVersion", "v4.0");
CodeDomProvider compiler = new CSharpCodeProvider(compilerOptions);
CompilerParameters parameters = new CompilerParameters();
parameters.WarningLevel = 4;
parameters.TreatWarningsAsErrors = false;
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = false;
parameters.OutputAssembly = GetFileName();
parameters.IncludeDebugInformation = false;
if (RoleEnvironment.IsAvailable)
parameters.TempFiles = new TempFileCollection(RoleEnvironment.GetLocalResource("CompilerTempFiles").RootPath, false);
string baseDir = Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location);
baseDir = baseDir.Substring(0,
baseDir.LastIndexOf(Path.DirectorySeparatorChar));
baseDir = baseDir.Substring(0,
baseDir.LastIndexOf(Path.DirectorySeparatorChar));
//Add required assembly references of your code
string assemblyName;
foreach (string assembly in GetReferences())
{
string suffix = assembly.EndsWith(".exe") ? "" : ".dll";
assemblyName = assembly;
if (!assembly.StartsWith("System"))
{
if (assembly.IndexOf(".dll") > -1)
{
assemblyName = FindAssembly(baseDir, assembly);
suffix = "";
}
parameters.ReferencedAssemblies.Add(assemblyName + suffix);
}
else
{
var assemblyPath = (from assm
in AppDomain.CurrentDomain.GetAssemblies()
where assm.FullName.IndexOf(assemblyName + ",") > -1
select assm).FirstOrDefault();
if (assemblyPath == null)
{
throw new Exception("Unable to locate assembly: "
+ assemblyName + suffix);
}
parameters.ReferencedAssemblies.Add(assemblyPath.Location);
}
}
//Get your dynamic code
string Code = GetCodeText();
CompilerResults results = compiler.CompileAssemblyFromSource(
parameters, Code);
return results;
}
With dynamic code you must have some known interface, so that you can create the dynamic object of given interface to invoke the code.
public IKnownInterface GetTableServiceContext()
{
string assemblyPath = GetFileName();
if (!File.Exists(assemblyPath))
{
throw new FileNotFoundException(assemblyPath + " not found");
}
System.Reflection.Assembly assem = AppDomain.CurrentDomain.Load(
File.ReadAllBytes(assemblyPath));
Type queryType = assem.GetType("DynamicClassName");
return Activator.CreateInstance(queryType) as IKnownInterface;
}
We should be avoiding dynamic code generation and look for solutions like dependency injection, MEF frameworks.
Yesterday, I had an interesting issue. It has been reported me that an ETL always misses the last row from the flat file. No matter what is the row is it happens for every file that the last row is missing.
It is wired issue, I started check the ETL and created a new ETL with DFT pointing the same share file. I could able to get all the rows. It was happening only in that particular ETL.
I copied the DFT from the error ETL to my new ETL. The problem disappeared. I was wondering about the magic happening here. The DFT is same, data file is same but the last row is getting missed.
I started comparing the ETL config and connections. oh…at last I could able to figure out the issue. It was due the Text Qualifier setting which update on the Flat File Connection component. Make sure it set to None, if you don’t have any special handling.
Related MSDN discussion
Engineering Excellence Having solid engineering process and tools in place help to improve the agility of the system. Here is the high-level...