4. Add "Timeout=3;" to the end of your connection string... with 3 being the number of seconds to wait before throwing the exception. The default is 30 seconds, which is why it takes about 30 seconds to throw you the error

2. Hrm... not sure why you're getting this error then. Here's the current code for the PrimaryKeyField property:
Public ReadOnly Property PrimaryKeyField() As String
Get
If Me.PrimaryKeyFields.Length = 1 Then
Return Me.PrimaryKeyFields(0)
Else
Throw New BusinessLayerException("The PrimaryKeyFields property must have exactly 1 field to use the PrimaryKeyField property.")
End If
End Get
End Property
Here's the code from version 1.3:
Public Overrides ReadOnly Property PrimaryKeyField() As String
Get
Throw New NotImplementedException("A class derived from " & GetType(BusinessLayer).FullName & " must override the property 'PrimaryKeyField'")
End Get
End Property
Did you ever download the source code for version 1.3 and compile it? You might try to download the version 1.4 source code, compile it in debug mode and step through it. You should be able to find where that exception is being thrown.