Bloggin in the UK RSS 2.0
 Wednesday, September 07, 2005

When I first started using Typed Datasets I fell into a couple of pitfalls that took me a day to figure out. To prevent some poor soul from suffering like I did here are some notes.

I work almost exclusivly with Stored Procedures, and i'm assuming you already know how to create a typed dataset. I don't like 'myDataSet' type examples so I have create a real world one, this dataset returns a result set with all the addresses associated with a customers proposal so is inventively called ProposalAddresses.

VB.Net 2003 Example Code:




'Declare an instance of the typed dataset you have already created
Dim dsProposalAddress As New ProposalAddresses

'Create a command to pass to the Get SqlDataAdapter function
'We need a SqlDataAdapter in order to populate our Typed Dataset,
'we need a SqlCommand object to tell our SqlDataAdapter where to
'get its data and what parameters to pass to the database.
Dim Command As New SqlClient.SqlCommand("sp_AddressSummary")
'Set the commands properties
Command.CommandType = CommandType.StoredProcedure
'Okay so you will have to create your own SQLConnection Object before reaching this point.
Command.Connection = MyConn
'If your stored procedure takes any parameters create them here.
Dim Proposal As New SqlClient.SqlParameter
Proposal.ParameterName = "@ProposalID"
Proposal.SqlDbType = SqlDbType.Int
Proposal.Value = ProposalID
'Attach your parameter to your command
Command.Parameters.Add(Proposal)
'===============================
'This line creates your SqlDataAdapter using the SqlCommand Object you have just created.
Dim daProposalAddresses As New SqlDataAdapter(Command)

'!! IMPORTANT: With Typed Datasets you must specify
'the additional parameter TableName when calling .Fill or Table(0)
'will not contain any rows and your DS members will not hold any data
daProposalAddresses.Fill(dsProposalAddress, dsProposalAddress.Tables(0).TableName)

'== Test what has been returned in your dataset ==
'This line returns from Row(0) the value in the FullAddress Column
MsgBox(dsProposalAddress.sp_AddressSummary(0).FullAddress)
'This line returns from Row(1) the value in the FullAddress Column
MsgBox(dsProposalAddress.sp_AddressSummary(1).FullAddress)



This code is to demonstrate how to retrieve data from a typed dataset, if you are going to be doing a lot of data access in your application you should consider creating a class that will hide away the above routines and reduce the amount of code you need to write.

Wednesday, September 07, 2005 11:05:08 AM (GMT Standard Time, UTC+00:00)  #    Comments [2] -

 Thursday, August 18, 2005

About a month ago Microsoft anounced that a future version of office (code name office12) would support open XML based formats for Word, Excel and Powerpoint. If you currently use these formats then this could be a big deal for you.

Our document production module at Redline Software makes extensive use of the Word object model but has hit a performance brick wall which we have solved by using lots of servers to render documents. The announcement that MS intend to open up the .doc format means that we will be able to manipulate Word files as text (XML) which should be much faster and give us greater control over the output and remove this brick wall.

Brian Jones is on the Microsoft Office team and keeps a blog here, both he and Jean Paoli have asked for feedback from developers about the new format specifications. If you think you will make extensive use of these it may pay dividends to check them out whilst they are still in development and give the office team your feedback when they can incorporate it.

Thursday, August 18, 2005 8:16:06 AM (GMT Standard Time, UTC+00:00)  #    Comments [0] -

 Wednesday, August 17, 2005

So I decided to move my boot disk off the onboard controller on my Shuttle and on to a Sillicon Image sil3112a Sata RAID controller card. Before doing this I installed the drivers for the card, but when I tried rebooting I got as far as the windows logo boot screen and then the pc restarted itself.

I reconnected the drive to the onboard controller ran Sysprep then shutdown, connected the drive to the sil3112a and restarted and bingo, all I had to do was re-enter the product key and setup a user account and I was up and running.

This was done on a Windows XP SP2 build pre activation, so it might involve a call to MS if you have already activated.

I have just ordered a second drive and I'm going to attempt to create a mirror on the sil3112a so that if one of my drives blows a gasket I won't have to rebuild my machine from scratch.

Wednesday, August 17, 2005 2:46:03 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] -

 Tuesday, August 09, 2005

Unfortunately my blog has been getting more and more trackback spam so I have decided  to turn trackbacks off until I upagrade to v1.8 of dasblog. I hope all those trackback spamming monkeys rot in hell!

Tuesday, August 09, 2005 8:15:11 AM (GMT Standard Time, UTC+00:00)  #    Comments [0] -

 Friday, August 05, 2005
This post on Neville Hobson's blog caught my eye. Podcast Con Uk is a one day event with speakers talking about podcasting either check out nevilles blog or head on over to PodcastCon UK to sign up or find out more.
Friday, August 05, 2005 7:50:58 AM (GMT Standard Time, UTC+00:00)  #    Comments [0] -

 Tuesday, August 02, 2005
Saw a friend on the weekend who runs his own landscape gardening business in Surrey if your garden is in need of some TLC check his website out at www.JHsmith.co.uk. If you are just at the ideas stage there are lots of pictures in the portfolio section.
Tuesday, August 02, 2005 12:46:31 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] -

 Thursday, July 28, 2005

Consume a .NET Assembly from a classic ASP page. by Darren Neimke

 

All I would add is that RegAsm lives in:

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322

NB
Beware of parameterized constructors, i.e. defining a Sub New() with parameters, if you do this your class will not be eligible for COM registration and won't show up in the registry or be creatable from your ASP pages / VB components.

Thursday, July 28, 2005 12:43:57 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] -

I got the above error when trying to generate a strong name key running filemon (see www.sysinternals.com) it showed that there was a file access error for me on the folder:

C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto

I had to give myself permissions on this folder and tell windows to propogate them to all the child objects then I could successfully generate a key using

SN.exe -k mykey.snk

This is the first time I've used filemon but I doubt it will be the last.

Thursday, July 28, 2005 11:33:03 AM (GMT Standard Time, UTC+00:00)  #    Comments [0] -

 Wednesday, July 27, 2005

Okay so it turns out it's all about performance (read my previous post) not forcing VB6 developers in ADO to set command parameter attributes like size and type, meant an additional round trip to the database. I don't have a problem with MS taking this functionality out for the default but they could have allowed us a way to turn it back on.

Fear not I a have written a class that will go off to the database fetch all the attributes of the parameters in your query so that all you have to do is specify the values. WARNING: This will slow things down two trips to the database are slower than one, the only way I can see you could remove some of this overhead would be come up with a caching scheme.

I have tried to comment the code so you should find it fairly straghtforward to use, I have only tried using it on SQL Server 2000 so far. The source is attached to this post for your dining pleasure.

SQL.zip (1.51 KB)
Wednesday, July 27, 2005 8:08:19 PM (GMT Standard Time, UTC+00:00)  #    Comments [1] -

What were the MS programmers smoking when they coded the System.Data.SQLClient and System.Data.Oledb wrappers? My beef is that under VB6 I made extensive use of parameterized stored procedures, with a couple of functions that handled the creating the connection and command object I had reduced the amount of code to:

Set Cm = GetCm("sp_MyStoredProc")
Cm.Execute

For a recordset it took a little more effort:

Set Cm = GetCm("sp_MyStoredProc")
Rs.Open(Cm)

For a parameterised query:

Set Cm = GetCm("sp_MyStoredProc")
SetCommandParameter Cm, "@MyParam", "Test"
Cm.Execute

With VB.net this has increased greatly as now I have to specify the Direction of the paramter and the size or get a runtime error!! Surely any observer can see this is a step backwards. If a stored procedure's parameter is altered so that the application now sets the wrong parameter direction and errors this is going to cause pain. If the reason this has been introduced is to speed things up then where's the option to turn it off and do it the old way?

If MS are trying to encourage VB6 old timers like myself to adopt their fancy new .Net then they should be trying to make my life easier not cause me to rip what little hair I have left out!

 

Wednesday, July 27, 2005 5:26:43 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] -

Archive
<September 2005>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2010
Charlie Barker
Sign In
Statistics
Total Posts: 163
This Year: 5
This Month: 1
This Week: 1
Comments: 76
Themes
Pick a theme:
All Content © 2010, Charlie Barker
DasBlog theme 'Business' created by Christoph De Baene (delarou)