|
Your CAPS-LOCK key seems to be most probably on. Typing in ALL-CAPS normally indicates a bad temper (viz) shouting. It may also indicates an amateurish attitude in a public discussion forum.
|
|
|
|
|
Dear Everyone.....
Hope you will be in best of your health....
I have an immediate assignment from my boss to collect the knowledge that what are the best practices & architecture to deal with databaes, tables using vb .net...
Actual problem is that i want to know simply that what way i should adopt for the subject. weather i should go with using data source managers or i should create objects, classes, procedures or whatsoever is...
i can quote an example of my question as;
CONTROL --> DATABINDINGS --> DATASOURCE -->
DATA-ADAPTER-->DATABASE
please help me...
thanks
Khurram
|
|
|
|
|
Your boss wants you to learn how to properly write a database application ?
I'm all for a seperate data layer, and all SQL in stored procs. Some people swear by ORMs.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Dear Graus,
thank you so much for the immediate response....
you have gotton my problem.... i am going for a one-hour presenation, so how i can describe in detail about the data layer...
my problem is not actually the conversion but to find out the exact model which i should follow to deal with my databases.
i mean what is the best method to deal with records that saves my memory, facilites me more, etc. etc.
please disclose more if you can....
thanks
|
|
|
|
|
Hi,
At a minimum you'll need to cover:
* Ad-hoc data access
* Stored procedure based DLs
* Custom business objects
* Template based ORM / Handmade ORM
* ORM mapping tools.
That list is pretty much in order from most-flexible to least-flexible, but also from most-effort to least-effort (in general). Your boss wants to hear about what the upfront cost is, how quick you can develop, how reliable your code will be, and the maintainance cost if things need to be changed.
Remember your boss is less interested in the technical details, and more interested in the risks and benefits of your choices!
I have to admit a certain bias towards ORM, as my company sells ORM tools. For a presentation you can certainly find a lot of "boss friendly" material on how ORM tools will benefit your development process on the site linked in my signature. Although we are writing about our products - the general gist applies to a lot of ORM tools.
|
|
|
|
|
Dear friend,
thanks once again for the nice response...
you are absolutely right in your sense.
I am just telling you the whole story of my last meeting with my boss. He is very conceptual and technical person. he is highly able to criticize the matters.
he is straight forwardly asking me the following questions
1. What is .net framework's internal architecture?
2. What are database oriented best practices in .net?
3. how would be application design in .net?
4. overview of .net studio?
5. .net framework multilanguge support?
6. Database access (recordsets, queries, classes, parameters)
7. What is the best way to insert, delete, find and update data?
other topics i have covered approximately. but now i am concentrating on database oriented best practices..
hope now you are very clear about my problem
|
|
|
|
|
khurramsheraz wrote: He is very conceptual and technical person. he is highly able to criticize the matters.
But, neither he nor you know the answers to these questions ?
1 - who cares ? If you don't know the basics, they are a google away. Anything more than that doesn't matter, certainly to database code
2 - The main thing is to let the .NET connection pool do it's work. Otherwise, no different to any other language
3 - n-tiered is always the best approach, IMO
4 - WHAT ? Have you not used it before ?
5 - resource files
6 - Buy a book on ADO.NET
7 - SQL
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Hello,
It also depends on how big the company is and how many different database applications are required.
I have certainly seen cases where ORM is simply not necessary because the company and /or the requirements arent too Big.
I am a big fan of a 3 tier approach myself
Dumb Database Layer - gets/upserts the data - if written correctly with abstract factories for each type of database (SQL, Oracle, Web Service etc.)
Once this is written it can be used everywhere and only needs changing when a new type of database is going to be used.
Business Layer - derived from a stongly created Base Class which holds the business rules for processing data entities. For example a User Business component or an "Order" Business component. In my case each busines component would be capable of navigating row by row or presenting a modified dataset for binding to gui.
The business layer would be where most of the on going maintenance would occur. It would hold all the business rules. Ie you change the users details , therefore generate an audit record.
These components could be stored in a different process or server if required.
Gui/Controller layer - This takes the data from the business layer and adds it to the Gui controls and then takes any changes and passes them to the business layer- it includes some gui based validation rules ie a field is just number or a date, that kind of thing.
Personally I think, for a small to perhaps medium sized company, that this gives the best framework in terms of long term maintenance costs and ease of use.
Yes its a bigger pain than just binding data to controls from within each app but once the initial overhead is taken care of I see this as a very robust solution.
Hope this helps
Martin
life is a bowl of cherries
go on take a byte
|
|
|
|
|
Agreed. When picking tools that are going to become a part of your development process you should choose very carefully, because its going to be hard to back out of it. Also a lot of tools are very complex to use - meaning a great deal of time is spent configuring and babysitting the tools.
Personally I am usually not comfortable using a tool that does more than one thing. Nothing is worse than installing a tool to handle your data layer that ends up restricting how you do things in the UI.
If you are interested in an ORM product thats not overbearing for use in smaller applications, I suggest you give Diamond Binding a test drive.
|
|
|
|
|
Mark Churchill wrote: your data layer that ends up restricting how you do things in the UI
agreed
but you can do it another way too.
for example my data layer has a factory class that contains a getdataset command
where I pass the datarequest command (in the form of MS SQL) , the connection as an object and the dataprovider type)
there are families of classes for each dataprovider
so for example I have an OracleViaWebservice family which takes the MS SQL command, converts it to oracle SQL, uses the connectio class to find identify the correct web service location and passes the request to the web service which then uses the oracle connectstring (stored in that connection class) and issues the comand aainst an oracle DB before returning the result.
now all that took time but now its written Its very extendable.
If I come across a new dataprovider (ie webservice to Siebel for example) I just create a new family of generic classes to handle the process and away I go.
If I come across another type of dataaccess (ie instead of processing a dataset, I need to process a er DataReader - yeah I know its a reach) then I just add the procesing code for a datareader to each existing family of classes
I find that the ongoing maintenance of my data layer is practically non existant now and its generic enough not to restrict my business layer.
Martin
life is a bowl of cherries
go on take a byte
|
|
|
|
|
ADODB.RecordSet.RecordCount()
Im confused about this function
ADODB.Recordset.RecordCount???? this code below is working in VB.Net 2003
and the my recordset "dbRecordset.RecordCount" returns "0" or "1" output value only...
but then when i copy this code and used to VB 2005??? it count to what ever records it fetch from the database table...
for example: expect that there's only 1 record inside the table? yes it returns 1's value but then after that countdown it returns agained to "ZERO"
so my IF and ELSE condition were executing both???? which is something elogical???
**********************************
frmLogin.vb
*******************************
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
Dim dbConnection As New ADODB.Connection
Dim dbRecordset As New ADODB.Recordset
Dim strDBPath as string
Dim strSQL As String
strDBPath = "c:\database\sample.mdb"
strSQL = "SELECT * FROM tblUser WHERE UserName='" & strUsername & "' and Password='" & strPassword & "';"
dbConnection.Mode = ConnectModeEnum.adModeReadWrite
dbConnection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data source="& strDBPath)
With dbRecordset
.Open(strSQL, dbConnection, CursorTypeEnum.adOpenStatic, LockTypeEnum.adLockOptimistic, -1)
If .RecordCount = 0 Then
MsgBox("Incorrect username & password" & vbTab, MsgBoxStyle.Exclamation, "Log-in Failed")
Else
frmMain.Show()
Me.Close()
End If
.Close()
End With
dbConnection.Close()
End Sub
*****************************************
Please Help...
Please be patient, im a newbie in VB...
Thanks in advance....
|
|
|
|
|
First things first...
WTH are you still using ADODB Recordsets?!?!
|
|
|
|
|
Not actually using ADODB before... but i am little bit force to follow this kind of database connections, there's is an existing system that is using ADODB connections that i am maintainning as of now.. So i have no choice but to follow the direction of the wind... ehehe otherwise? i have to change all database connections of the former programmer of that system i've said so.. and it seems i need to overwhole that program if i do that...
ADODB.RecordSet.RecordCount always return 0 or -1
|
|
|
|
|
Hi,
I am trying to draw a webpage to a bitmap without showing it to the user. I know the webbrowser control doesnt support the DrawToBitmap function but I found this really helpful post on codeproject that showed how to go about it. Firstly, it required the calling of the interface from MSHTML:
<interfacetype(cominterfacetype.interfaceisiunknown)> _
<guid("3050f669-98b5-11cf-bb82-00aa00bdce0b")> _
Public Interface IHTMLElementRender2
Sub DrawToDC(ByVal hdc As System.IntPtr)
Sub SetDocumentPrinter(ByVal bstrPrinterName As String, ByRef hdc As _RemotableHandle)
End Interface
and then i did the following in the document_complete event:
Dim rawDoc As IHTMLDocument2 = DirectCast(wBrowser.Document.DomDocument, IHTMLDocument2)
Dim rawBody As IHTMLElement = rawDoc.body
Dim render As IHTMLElementRender2 = DirectCast(rawBody, IHTMLElementRender2)
Dim screenCapture As New Bitmap(Me.Width, Me.Height)
Dim drawRectangle As New Rectangle(0, 0, Me.Width, Me.Height)
wBrowser.DrawToBitmap(screenCapture, drawRectangle)
Dim grap As Graphics = Graphics.FromImage(screenCapture)
Dim graphicsHdc As System.IntPtr = grap.GetHdc()
render.DrawToDC(graphicsHdc)
Now the problem. It is working fine accept for sites such as ask.com (where it shows a blank bitmap) and wikipedia.org ( where it just shows Wikipedia on the top). I have an idea as to why this is happening. I believe its cause these sites somehow donot house their content on the document body which I am painting. Any idea as to how this can be rectified?
Thanks!
Ahmad
|
|
|
|
|
And I think its due to the DocType Tag on these sites. Anyway around it?
|
|
|
|
|
I'm building a project in VB2005 and I need the DrawEdge function. Its a win32 API call. I cammot get it working. It seems that the parameter RECT is giving the troubles.
Declaration:
Private Declare Auto Function DrawEdge Lib "user32" (ByVal hdc As IntPtr, ByRef qrc As Rectangle, ByVal edge As Integer, ByVal grfFlags As Integer) As Integer
Usage:
Dim rc As New Rectangle(100, 100, 100, 100)
Dim hDC As IntPtr
hDC = g.GetHdc
Call DrawEdge(hDC, rc, BDR_SUNKEN, BF_RECT)
g.ReleaseHdc(hDC)
Does anyone knows whats wrong
best regards,
Koos.
|
|
|
|
|
I think you need to also define the RECT struct. I'd recommend looking at www.pinvoke.net, they probably have the code you need.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
hi, i am new vb learner and i want to change date variable to string variable is there any build in function in vb6?
|
|
|
|
|
If you're new, I recommend dropping VB6, which is obsolete, unsupported and nasty. VB.NET 2005 express edition is free from Microsoft.
And, in VB.NET, the ToString method would do what you're after.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
CStr(yourdate) should do it.
That said I 100% agree with Christian. Don't learn VB6 - it will only teach you bad practices. And why bother when Visual Studio Express is free?
|
|
|
|
|
Hello I'm trying to get time difference for each record in my datagrid - but I'm currently having problems with my loop - I'm only getting the time difference for the first record - Help will be really appreciated. In this example I'm using a for each - any ideas will be great...
Dim d1 As DateTime = conv
Dim d2 As DateTime = System.DateTime.Today
Dim subtract, absday
subtract = 0
'gworkdays = DateDiff("d", d1, d2)
Dim rec As DataRowView
'Dim x As Integer
'Do Time Calculation for each record
For Each rec In dgOrderReport.DataSource
Select Case DatePart("w", d1)
Case 1
subtract = subtract + 1
Case 7
subtract = subtract + 2
End Select
Select Case DatePart("w", d2)
Case 1
subtract = subtract + 2
Case 7
subtract = subtract + 1
End Select
absday = DateDiff("d", d1, d2) + 1 - subtract
fncGetDays = absday - CInt(2 * (absday \ 7))
If fncGetDays < 0 Then fncGetDays = 0
'x = x + 1
Next rec<code></code>
Thank You
|
|
|
|
|
KA National Marker wrote: For Each rec In dgOrderReport.DataSource
rec is your record - where in your code do you use this value ?
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
As of right now in the above code rec is set as my DataRowView
'Dim rec As DataRowView ~~~ which not correct what so ever
I'm really having problems with the syntax with the FOR Loop
Thank you for the response.
Thank You
|
|
|
|
|
The issue is, you're using a for loop to iterate over the data, rec each time is a datarowview. I'm not familiar with this class, but I assume it represents a view into a row of your data. So, my question was, why are you not using this variable to access data from that row, which is surely what the loop is for ? Unless there's some VB magic going on here, you ignore the 'rec' variable which presumably contains the values for the row you want to process, which means you process the same data each time ( whatever that is )
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
I'm still not 100% getting it...Also I'm not really familiar with this DataRowView class I've seen it used for datagrid search in the past I believe.
I dont believe I'm ignoring the rec variable. Unless your saying within that loop I will have to tell it to go to the next rec? Make Sense...
Dim rec As DataRowView
'Dim x As Integer
'Do Time Calculation for each record
For Each rec In dgOrderReport.DataSource
Next rec<code></code>
Thank You
|
|
|
|