Have you ever wonder what is the time complexity of accessing DataRow by column name? Unfortunately, this information is not specified on MSDN.
So the obvious answer would be O(n). We might think that there is iteration on data columns and in worst case it would iterate on all of them.
The actual answer can be discovered by looking on System.Data.dll using Reflector. We'll see there, that there is an access to Hashtable of column names by name, which obviosly take O(1).
So the overall complexity of the following would be O(1).
object data = row["CUSTOMER"];
Wednesday, 4 November 2009
Wednesday, 30 September 2009
How to retrieve new row data from INSERT using Oracle DataAccess
Answering a question on StackOverflow:
"I am using Oracle database server with Oracle DataAccess client. What I need to do is INSERT a new row of data, then retrieve the auto-generated ID field of the newly-created row for another INSERT command, immediately following. What is the best way to do this?"
Answer:
1. Modify the INSERT query by adding RETURNING keyword
2. Add a bind variable to your OracleCommand named "column_id"
3. Take its value after the command is executed
"I am using Oracle database server with Oracle DataAccess client. What I need to do is INSERT a new row of data, then retrieve the auto-generated ID field of the newly-created row for another INSERT command, immediately following. What is the best way to do this?"
Answer:
1. Modify the INSERT query by adding RETURNING keyword
"INSERT INTO table_name (column_name1, column_name2) VALUES ('val1', 'val2')
RETURNING module_id INTO :column_id"
* This source code was highlighted with Source Code Highlighter.
2. Add a bind variable to your OracleCommand named "column_id"
3. Take its value after the command is executed
Monday, 15 June 2009
V2: WCF CollectionDataContract and DataMember attributes
Following Jeff's comment on the first version of this post, here are some explanations and a full class.
Q1. Why did I write "implement IEnumerable" twice?
A1. My original intention was to derive my class from ICollection<T>. Thus I had to implement IEnumerable and IEnumerable<T>.
Q2. Why do I bother to implement IEnumerable at all if the class is not "decorated" as IEnumerable?
A2. ICollection<T> "derives" from IEnumerable<T> and IEnumerable, so we have to implement both of them when writing a class that implements ICollection<T>
Here is a complete class:
Q1. Why did I write "implement IEnumerable" twice?
A1. My original intention was to derive my class from ICollection<T>. Thus I had to implement IEnumerable and IEnumerable<T>.
Q2. Why do I bother to implement IEnumerable at all if the class is not "decorated" as IEnumerable?
A2. ICollection<T> "derives" from IEnumerable<T> and IEnumerable, so we have to implement both of them when writing a class that implements ICollection<T>
Here is a complete class:
[DataContract]
public class EntityCollectionWorkaround<EntityType> : ICollection<EntityType>
{
#region Constructor
public EntityCollectionWorkaround()
{
Entities = new List<EntityType>();
}
#endregion
[DataMember]
public int AdditionalProperty { get; set; }
[DataMember]
public List<EntityType> Entities { get; set; }
#region ICollection<T> Members
public void Add(EntityType item)
{
Entities.Add(item);
}
public void Clear()
{
this.Entities.Clear();
}
public bool Contains(EntityType item)
{
return Entities.Contains(item);
}
public void CopyTo(EntityType[] array, int arrayIndex)
{
this.Entities.CopyTo(array, arrayIndex);
}
public int Count
{
get
{
return this.Entities.Count;
}
}
public bool IsReadOnly
{
get
{
return false;
}
}
public bool Remove(EntityType item)
{
return this.Entities.Remove(item);
}
public EntityType this[int index]
{
get
{
return this.Entities[index];
}
set
{
this.Entities[index] = value;
}
}
#endregion
#region IEnumerable<T> Members
public IEnumerator<EntityType> GetEnumerator()
{
return this.Entities.GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return this.Entities.GetEnumerator();
}
#endregion
}
* This source code was highlighted with Source Code Highlighter.
Monday, 8 June 2009
Post-build assembly manipulation
We often think how to modify our code during writing, debugging, but rarely after assembly is built. Well, there are a few kinds of post-build manipulations we might want to perform on compiled assemblies:
Merge
This nice utility was developed by Mike Barnett from Microsoft Research and it enables merging multiple assemblies to a single one. This may be very useful, when one wants to deliver a single component or executable without exposing the internal structure of assemblies. It may be used as command-line utility (from post build action as well) and as a assembly reference and wrapped within another tool. It does not work on Silverlight assemblies, at least at the moment of writing these lines and I asked Mike to check this out.
http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx
Convert to Silverlight
This project developed by Suriel Bendahan enables converting assemblies compiled on server-side .NET to Silverlight compatible assemblies. It makes possible to reuse code written as "server-side" on Silverlight client. It might be useful for generic data structures, generic algorithms, input validations, sharing interfaces etc. The project is provided with it sources, so it can be modified/adopted for your needs.
http://www.codeproject.com/KB/silverlight/SLAssemblies.aspx
Compress
Silverlight assemblies are being downloaded to browser in a XAP file, which is a bunch of DLLs compressed using ZIP compression. This project developed by Rob Houweling uncompresses these assemblies and compresses them again with a higher compression rate. This is very useful when XAP size becomes an issue.
http://web-snippets.blogspot.com/2008/11/another-one-on-repacking-xaps-to-reduce.html
Obfuscate
Obfuscation is a process of changing the readability of the code without changing its functionality. The reason for doing this is preventing others from seeing implementation. Visual Studio comes with a Dotfuscator Community Edition and there are others providers of obfuscation utilities.
Merge
This nice utility was developed by Mike Barnett from Microsoft Research and it enables merging multiple assemblies to a single one. This may be very useful, when one wants to deliver a single component or executable without exposing the internal structure of assemblies. It may be used as command-line utility (from post build action as well) and as a assembly reference and wrapped within another tool. It does not work on Silverlight assemblies, at least at the moment of writing these lines and I asked Mike to check this out.
http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx
Convert to Silverlight
This project developed by Suriel Bendahan enables converting assemblies compiled on server-side .NET to Silverlight compatible assemblies. It makes possible to reuse code written as "server-side" on Silverlight client. It might be useful for generic data structures, generic algorithms, input validations, sharing interfaces etc. The project is provided with it sources, so it can be modified/adopted for your needs.
http://www.codeproject.com/KB/silverlight/SLAssemblies.aspx
Compress
Silverlight assemblies are being downloaded to browser in a XAP file, which is a bunch of DLLs compressed using ZIP compression. This project developed by Rob Houweling uncompresses these assemblies and compresses them again with a higher compression rate. This is very useful when XAP size becomes an issue.
http://web-snippets.blogspot.com/2008/11/another-one-on-repacking-xaps-to-reduce.html
Obfuscate
Obfuscation is a process of changing the readability of the code without changing its functionality. The reason for doing this is preventing others from seeing implementation. Visual Studio comes with a Dotfuscator Community Edition and there are others providers of obfuscation utilities.
Monday, 25 May 2009
WolframAlpha
A new computational knowledge base is up and running. It calculates whatever you want, including your mortgage return, distance between cities and much more.
Try it: http://www.wolframalpha.com
In order to add WolframAlpha to search providers of your IE click here and follow instructions on "Create Your Own" section
Try it: http://www.wolframalpha.com
In order to add WolframAlpha to search providers of your IE click here and follow instructions on "Create Your Own" section
Monday, 27 April 2009
Google surprises again
Google do not stop to surprise us with their Holiday logos.
They presented their logo in a form of a Gogol's famous nose on his 200th anniversary:
Now they present a logo in Morse code on Samuel Morse's anniversary:
What's next?
They presented their logo in a form of a Gogol's famous nose on his 200th anniversary:
Now they present a logo in Morse code on Samuel Morse's anniversary:
What's next?
Great tool for files synchronizing: GetDropBox.com
There are things, that when we discover them at first we think "How they weren't invented before?", then we get used to them very quickly and finally we can't imagine living without them. One of such things is a great tool that keeps files on your different computers synchronized. The tool is Drop Box: it creates a Drop Box folder on your computers, for example your laptop and your desktop machine and synchronizes them. So you may drop files with any directories structure on your desktop and they will appear on the laptop as well. In addition, you can browse the files on the web, share them with others etc.
Follow this link, so I'll get an extra space:
Drop Box
Follow this link, so I'll get an extra space:
Drop Box
Thursday, 16 April 2009
WCF CollectionDataContract and DataMember attributes
I came to write this post just occasionally: I was required to add a property to an existing collection. The colleciton was generated on the WCF and was sent to a client. I was surprised to discover, that it's not supported and other people already faced this issue and expressed their frustration and posted different workarounds on the web. Unfortunately, none of these suggestions worked. So I decided to post a tested solution.
So here is the situation, we have an Entity class and a collection of them:
It will compile, but will not serialize AdditionalProperty at all! So what can we do about it if EntitiesCollection must stay a Collection?
We can mark our collection as DataContract and wrap another collection inside. Like this:
Hope it helped somebody
So here is the situation, we have an Entity class and a collection of them:
using System.Collections.ObjectModel;
using System.Runtime.Serialization;
using System.Collections.Generic;
[DataContract]
public class Entity
{
public int ID {get; set;}
public int Name {get; set;}
}
[CollectionDataContract]
public class EntityCollectionNotSupported : Collection
{
[DataMember]
public int AdditionalProperty { get; set; }
}
* This source code was highlighted with Source Code Highlighter.
It will compile, but will not serialize AdditionalProperty at all! So what can we do about it if EntitiesCollection must stay a Collection?
We can mark our collection as DataContract and wrap another collection inside. Like this:
[DataContract]
public class EntityCollectionWorkaround : ICollection
{
public EntityCollectionWorkaround()
{
Entities = new List();
}
[DataMember]
public int AdditionalProperty { get; set; }
[DataMember]
public List Entities { get; set; }
// Implement here ICollection,
// IEnumerable and IEnumerable members
// by wrapping Entities
}
* This source code was highlighted with Source Code Highlighter.
Hope it helped somebody
Subscribe to:
Posts (Atom)