467,104 Members | 1,168 Online
Bytes | Developer Community
Ask Question

Home New Posts Topics Members FAQ

Post your question to a community of 467,104 developers. It's quick & easy.

date/time fields

Hallo,
I know a lot has already been told about date/time fields in a database but
still confuses me, specif when dealing with SQLserver(Express).
It seems that sqlserver only accepts the date in a "yyyyMMdd" format?
(difference between Express and MSDE2000A ?)
What is the one and only true way to deal with this problem in VB2005:
Local settings are Dutch (Belgium) ; thus date is in "dd/MM/yy" (or perhaps
dd/MM/yyyy) and time in "hh:mm:ss"

dim MyDateVar as string, MyIdVar as Integer
dim MyCommand = New Sqlcommand("",Connection)
MyCommand.commandtext = "Update MyTable Set MyDatefield = '" & MyDateVar &
"' Where MyIdField = " & MyIdVar = SomeIntegerValue
MyCommand.executenonquery

How to deal with the MyDateVar when:

1.
The Variable comes from a textbox knowing that the user puts in dd/MMyyyy
In this case there is no need to have the time with it.

2.
The date comes from a datetimepicker control
(MyDateVar = DtPicker.Value)?

3.
The date and time comes from the system
MyDateVar= Format(DateTime.Now, "yyyyMMdd") seems to work but
Format(DateTime.Now, "yyyyMMdd.hhmmss") gives a runtime error

So, any help and/or suggestion on this will be greatly appreciated.
Thanks and greetings to all
Jerome
Jan 25 '06 #1
  • viewed: 3705
Share:
7 Replies
Jerome,

It is very simple you should never use a date/time as a string, however
always as a DateTime field.

When you present that to a textbox, than you can use the overloaded toString
with the Iformatprovider
http://msdn.microsoft.com/library/de...classtopic.asp

If you get it back you can use the Cdate
mydateField = Cdate(mytextbox.text)

And if you want to supply it to a database you use the parameters.
http://www.vb-tips.com/default.aspx?...6-7139b8970071

Maybe even better to show with this more extended but with a Dutch datetime
in it and for Access (OleDb)
http://www.vb-tips.com/default.aspx?...3-eb8b44af0137

In fact is that all.

(The datetimepicker.value returns a datetime field).

Cor


Jan 25 '06 #2
"Jerome" <Jo*****@fake.com> schrieb
Hallo,
I know a lot has already been told about date/time fields in a
database but still confuses me, specif when dealing with
SQLserver(Express).
It seems that sqlserver only accepts the date in a "yyyyMMdd"
format? (difference between Express and MSDE2000A ?)
What is the one and only true way to deal with this problem in
VB2005: Local settings are Dutch (Belgium) ; thus date is in
"dd/MM/yy" (or perhaps dd/MM/yyyy) and time in "hh:mm:ss"

dim MyDateVar as string, MyIdVar as Integer
dim MyCommand = New Sqlcommand("",Connection)
MyCommand.commandtext = "Update MyTable Set MyDatefield = '" &
MyDateVar & "' Where MyIdField = " & MyIdVar = SomeIntegerValue
MyCommand.executenonquery

How to deal with the MyDateVar when:
Store date/time values *always* in variables of type DateTime.
1.
The Variable comes from a textbox knowing that the user puts in
dd/MMyyyy In this case there is no need to have the time with it.
I guess this is "dd/MM/yyyy"?

Use Date.ParseExact (or Date.Parse) to convert form string to DateTime.
2.
The date comes from a datetimepicker control
(MyDateVar = DtPicker.Value)?
Declare MyDateVar as DateTime and everything is fine. Maybe you have to cut
off the time:

MyDateVar = DtPicker.Value.Date

3.
The date and time comes from the system
MyDateVar= Format(DateTime.Now, "yyyyMMdd") seems to work but
Format(DateTime.Now, "yyyyMMdd.hhmmss") gives a runtime error
You don't need this for an SQL.
So, any help and/or suggestion on this will be greatly appreciated.


Use parameters with MyCommand. You won't have to care about the format
anymore:

dim MyDateVar as datetime
dim MyCommand = New Sqlcommand("",Connection)

MyDateVar = date.parse(mytextbox.text)
- or -
MyDateVar = DtPicker.Value.Date
MyCommand.commandtext = "Update MyTable Set MyDatefield = @mydate Where
MyIdField = @id"

with mycommand.parameters
.add("@mydate", SqlDbType.DateTime).value = mydatevar
.add("@id", SqlDbType.Int).value = SomeIntegerValue
end with

MyCommand.executenonquery
In addition, see the T-SQL reference:
http://msdn.microsoft.com/library/en...ua-uz_82n9.asp

....leading you to:
http://msdn.microsoft.com/library/en...ea-ez_4aur.asp

....leading you to:
http://msdn.microsoft.com/library/en...ca-co_1n1v.asp
(see "datetime constants")
Armin

Jan 25 '06 #3
Hi
This is my little guide :
- For dates, use date variables, not into strings. That way you can
do arithmetics, format properly , passs parameters without problems etc
- Use Cdate when picking up dates/times from text fields
- When calling SQLprocedures, use parameters.
- When building an SQL string in a (VB) program, use date format
yyyy-mm-dd , ie. today is 2006-01-25 , and format explicitly ,
do not rely on implicit (locale dependent) formatting.
ie. SQLtext = ... & format (date_var,"yyyy-mm-dd hh:MM:ss") & ...
The somewhat exotic format does not matter inside a program, the important
thing
is that SQLserver never fails to understand you correctly.
No more lottery if 01/04/06 is April 1st or January 4th or ...
Matti

"Jerome" <Jo*****@fake.com> wrote in message
news:yw**********************@phobos.telenet-ops.be...
Hallo,
I know a lot has already been told about date/time fields in a database
but still confuses me, specif when dealing with SQLserver(Express).
It seems that sqlserver only accepts the date in a "yyyyMMdd" format?
(difference between Express and MSDE2000A ?)
What is the one and only true way to deal with this problem in VB2005:
Local settings are Dutch (Belgium) ; thus date is in "dd/MM/yy" (or
perhaps dd/MM/yyyy) and time in "hh:mm:ss"

dim MyDateVar as string, MyIdVar as Integer
dim MyCommand = New Sqlcommand("",Connection)
MyCommand.commandtext = "Update MyTable Set MyDatefield = '" & MyDateVar &
"' Where MyIdField = " & MyIdVar = SomeIntegerValue
MyCommand.executenonquery

How to deal with the MyDateVar when:

1.
The Variable comes from a textbox knowing that the user puts in dd/MMyyyy
In this case there is no need to have the time with it.

2.
The date comes from a datetimepicker control
(MyDateVar = DtPicker.Value)?

3.
The date and time comes from the system
MyDateVar= Format(DateTime.Now, "yyyyMMdd") seems to work but
Format(DateTime.Now, "yyyyMMdd.hhmmss") gives a runtime error

So, any help and/or suggestion on this will be greatly appreciated.
Thanks and greetings to all
Jerome

Jan 25 '06 #4
I'm a database person, so from a database perspective:

Make sure the variable in the client is date datatype, not string.
Pass it though a command object and a parameter object to SQL Server = you are safe. ADO will do the
string conversion for you.
If you absolutely want to pass it as a string to SQL Server, read
http://www.karaszi.com/SQLServer/info_datetime.asp

--
Tibor Karaszi, SQL Server MVP
http://www.karaszi.com/sqlserver/default.asp
http://www.solidqualitylearning.com/
Blog: http://solidqualitylearning.com/blogs/tibor/
"Jerome" <Jo*****@fake.com> wrote in message news:yw**********************@phobos.telenet-ops.be...
Hallo,
I know a lot has already been told about date/time fields in a database but still confuses me,
specif when dealing with SQLserver(Express).
It seems that sqlserver only accepts the date in a "yyyyMMdd" format? (difference between Express
and MSDE2000A ?)
What is the one and only true way to deal with this problem in VB2005:
Local settings are Dutch (Belgium) ; thus date is in "dd/MM/yy" (or perhaps dd/MM/yyyy) and time
in "hh:mm:ss"

dim MyDateVar as string, MyIdVar as Integer
dim MyCommand = New Sqlcommand("",Connection)
MyCommand.commandtext = "Update MyTable Set MyDatefield = '" & MyDateVar & "' Where MyIdField = "
& MyIdVar = SomeIntegerValue
MyCommand.executenonquery

How to deal with the MyDateVar when:

1.
The Variable comes from a textbox knowing that the user puts in dd/MMyyyy
In this case there is no need to have the time with it.

2.
The date comes from a datetimepicker control
(MyDateVar = DtPicker.Value)?

3.
The date and time comes from the system
MyDateVar= Format(DateTime.Now, "yyyyMMdd") seems to work but Format(DateTime.Now,
"yyyyMMdd.hhmmss") gives a runtime error

So, any help and/or suggestion on this will be greatly appreciated.
Thanks and greetings to all
Jerome


Jan 25 '06 #5
Hoi Friends,
Thanks very much the answers. At least these are short, understandable and
valuable answers! Far more better than all the microsoft stuff readings.
I will try the suggestions right away when my sqlserverExpress is working
again. Yesterday Mr. Murphy came to visit and ruined my VS2005 and
Sqlexpress. Nice!
Anyway, the answers leaves my with one more question:
What are the benifits of using Parameters instead plain variables (for
numeric or charachter fields at least)?
As i can see at a first glance there is a lot more wrtiting to do for the
Parameters. (adding them to a command before they are usable, defining the
number of chars for a string param, etc,etc)?
For instance: If the client decides that a stringfield should have more
characters capacity, one should go trough the whole project and adjust the
number of chars for the Params that points to that specific field? Or can
one program a param with, let's say 100 chars, where the field is only 50
chars ? The max charachters is limited by the maxlength property of the
textbox anyway.

Thanks once again for the answers and suggestions
Jerome
"Tibor Karaszi" <ti***************************@hotmail.nomail.co m> schreef
in bericht news:ea**************@TK2MSFTNGP14.phx.gbl...
I'm a database person, so from a database perspective:

Make sure the variable in the client is date datatype, not string.
Pass it though a command object and a parameter object to SQL Server = you
are safe. ADO will do the string conversion for you.
If you absolutely want to pass it as a string to SQL Server, read
http://www.karaszi.com/SQLServer/info_datetime.asp

--
Tibor Karaszi, SQL Server MVP
http://www.karaszi.com/sqlserver/default.asp
http://www.solidqualitylearning.com/
Blog: http://solidqualitylearning.com/blogs/tibor/
"Jerome" <Jo*****@fake.com> wrote in message
news:yw**********************@phobos.telenet-ops.be...
Hallo,
I know a lot has already been told about date/time fields in a database
but still confuses me, specif when dealing with SQLserver(Express).
It seems that sqlserver only accepts the date in a "yyyyMMdd" format?
(difference between Express and MSDE2000A ?)
What is the one and only true way to deal with this problem in VB2005:
Local settings are Dutch (Belgium) ; thus date is in "dd/MM/yy" (or
perhaps dd/MM/yyyy) and time in "hh:mm:ss"

dim MyDateVar as string, MyIdVar as Integer
dim MyCommand = New Sqlcommand("",Connection)
MyCommand.commandtext = "Update MyTable Set MyDatefield = '" & MyDateVar
& "' Where MyIdField = " & MyIdVar = SomeIntegerValue
MyCommand.executenonquery

How to deal with the MyDateVar when:

1.
The Variable comes from a textbox knowing that the user puts in dd/MMyyyy
In this case there is no need to have the time with it.

2.
The date comes from a datetimepicker control
(MyDateVar = DtPicker.Value)?

3.
The date and time comes from the system
MyDateVar= Format(DateTime.Now, "yyyyMMdd") seems to work but
Format(DateTime.Now, "yyyyMMdd.hhmmss") gives a runtime error

So, any help and/or suggestion on this will be greatly appreciated.
Thanks and greetings to all
Jerome

Jan 26 '06 #6
> What are the benifits of using Parameters instead plain variables (for numeric or charachter
fields at least)?
* Avoid "SQL Injection" (Google and you will find.)

* Assuming that ADO.NET is smart enough to execute your code using sp_executesql and make parameters
for that out of your ADO.NET parameters: You will have a lot greater chance for your query plan to
be re-used.
If you just build a string and first search for "johnson", then SQL Server can cache that plan. But
that cached plan is identified (basically) based on all the text in the query. "johnson" is a part
of that text. Next time, you search for "smith", and SQL Server first searches for a plan match.
Such doesn't exists (you searched for "johnson" last time). So a new plan will be added to plan
cache for this query with "smith" embedded. I've seen installations with 10,000 instances of plans
in cache for the same query! And how much memory is now available for caching data? Not to speak
about the overhead of searching through many many thousands of plans in cache in order to find a
match - every time you execute a query - in vain. If they were parametized, then you'd have only one
plan for the query in cache, and SQL Server would substitute the parameters.

* Better yet, use stored procedures. This way you also have control over if this plan should be
cached in the first place and also plan recompiles. Along with bunch of other advantages of using
stored procedures.

*"Feels better"

I bet others can jump in with other advantages.

--
Tibor Karaszi, SQL Server MVP
http://www.karaszi.com/sqlserver/default.asp
http://www.solidqualitylearning.com/
Blog: http://solidqualitylearning.com/blogs/tibor/
"Jerome" <Jo*****@fake.com> wrote in message news:oK**********************@phobos.telenet-ops.be... Hoi Friends,
Thanks very much the answers. At least these are short, understandable and valuable answers! Far
more better than all the microsoft stuff readings.
I will try the suggestions right away when my sqlserverExpress is working again. Yesterday Mr.
Murphy came to visit and ruined my VS2005 and Sqlexpress. Nice!
Anyway, the answers leaves my with one more question:
What are the benifits of using Parameters instead plain variables (for numeric or charachter
fields at least)?
As i can see at a first glance there is a lot more wrtiting to do for the Parameters. (adding them
to a command before they are usable, defining the number of chars for a string param, etc,etc)?
For instance: If the client decides that a stringfield should have more characters capacity, one
should go trough the whole project and adjust the number of chars for the Params that points to
that specific field? Or can one program a param with, let's say 100 chars, where the field is only
50 chars ? The max charachters is limited by the maxlength property of the textbox anyway.

Thanks once again for the answers and suggestions
Jerome
"Tibor Karaszi" <ti***************************@hotmail.nomail.co m> schreef in bericht
news:ea**************@TK2MSFTNGP14.phx.gbl...
I'm a database person, so from a database perspective:

Make sure the variable in the client is date datatype, not string.
Pass it though a command object and a parameter object to SQL Server = you are safe. ADO will do
the string conversion for you.
If you absolutely want to pass it as a string to SQL Server, read
http://www.karaszi.com/SQLServer/info_datetime.asp

--
Tibor Karaszi, SQL Server MVP
http://www.karaszi.com/sqlserver/default.asp
http://www.solidqualitylearning.com/
Blog: http://solidqualitylearning.com/blogs/tibor/
"Jerome" <Jo*****@fake.com> wrote in message
news:yw**********************@phobos.telenet-ops.be...
Hallo,
I know a lot has already been told about date/time fields in a database but still confuses me,
specif when dealing with SQLserver(Express).
It seems that sqlserver only accepts the date in a "yyyyMMdd" format? (difference between
Express and MSDE2000A ?)
What is the one and only true way to deal with this problem in VB2005:
Local settings are Dutch (Belgium) ; thus date is in "dd/MM/yy" (or perhaps dd/MM/yyyy) and time
in "hh:mm:ss"

dim MyDateVar as string, MyIdVar as Integer
dim MyCommand = New Sqlcommand("",Connection)
MyCommand.commandtext = "Update MyTable Set MyDatefield = '" & MyDateVar & "' Where MyIdField =
" & MyIdVar = SomeIntegerValue
MyCommand.executenonquery

How to deal with the MyDateVar when:

1.
The Variable comes from a textbox knowing that the user puts in dd/MMyyyy
In this case there is no need to have the time with it.

2.
The date comes from a datetimepicker control
(MyDateVar = DtPicker.Value)?

3.
The date and time comes from the system
MyDateVar= Format(DateTime.Now, "yyyyMMdd") seems to work but Format(DateTime.Now,
"yyyyMMdd.hhmmss") gives a runtime error

So, any help and/or suggestion on this will be greatly appreciated.
Thanks and greetings to all
Jerome



Jan 26 '06 #7
Hoi Tibor,
That explains a lot.
SQL Injection, in my case, is unlikely to occur.They are not going to tamper
with the application. There are a maximu of 4 persons working with the
application and the whole bunch is not even connected to the internet.
Nobody at the site in question ever heard about Sql not to speak about
running a query! I was obliged to use an existing MsAccess Db as backend
(they already are working for years with Access) ;-) and i had to enhance
and expanding the application. So, rewriting 200+ functions!?
Now i'm trying for myself and for learning purposes to rebuild parts of the
applic in VB2005 and with a sqlexpress as backend and that's when i ran into
those date problems. Perhaps that explains a bit more my questions and i am
happy that people like you and others are willing to give advice. If you
have to learn it from the books of Microsoft.....pfff. Even for a simple
readonly lookup table and a combobox they lead trough a complete
strongly-typed dataset! Ridicolous

Anyway, thanks a lot for the feedback
Jerome

"Tibor Karaszi" <ti***************************@hotmail.nomail.co m> schreef
in bericht news:eF**************@TK2MSFTNGP09.phx.gbl...
What are the benifits of using Parameters instead plain variables (for
numeric or charachter fields at least)?


* Avoid "SQL Injection" (Google and you will find.)

* Assuming that ADO.NET is smart enough to execute your code using
sp_executesql and make parameters for that out of your ADO.NET parameters:
You will have a lot greater chance for your query plan to be re-used.
If you just build a string and first search for "johnson", then SQL Server
can cache that plan. But that cached plan is identified (basically) based
on all the text in the query. "johnson" is a part of that text. Next time,
you search for "smith", and SQL Server first searches for a plan match.
Such doesn't exists (you searched for "johnson" last time). So a new plan
will be added to plan cache for this query with "smith" embedded. I've
seen installations with 10,000 instances of plans in cache for the same
query! And how much memory is now available for caching data? Not to speak
about the overhead of searching through many many thousands of plans in
cache in order to find a match - every time you execute a query - in vain.
If they were parametized, then you'd have only one plan for the query in
cache, and SQL Server would substitute the parameters.

* Better yet, use stored procedures. This way you also have control over
if this plan should be cached in the first place and also plan recompiles.
Along with bunch of other advantages of using stored procedures.

*"Feels better"

I bet others can jump in with other advantages.

--
Tibor Karaszi, SQL Server MVP
http://www.karaszi.com/sqlserver/default.asp
http://www.solidqualitylearning.com/
Blog: http://solidqualitylearning.com/blogs/tibor/
"Jerome" <Jo*****@fake.com> wrote in message
news:oK**********************@phobos.telenet-ops.be...
Hoi Friends,
Thanks very much the answers. At least these are short, understandable
and valuable answers! Far more better than all the microsoft stuff
readings.
I will try the suggestions right away when my sqlserverExpress is working
again. Yesterday Mr. Murphy came to visit and ruined my VS2005 and
Sqlexpress. Nice!
Anyway, the answers leaves my with one more question:
What are the benifits of using Parameters instead plain variables (for
numeric or charachter fields at least)?
As i can see at a first glance there is a lot more wrtiting to do for the
Parameters. (adding them to a command before they are usable, defining
the number of chars for a string param, etc,etc)?
For instance: If the client decides that a stringfield should have more
characters capacity, one should go trough the whole project and adjust
the number of chars for the Params that points to that specific field? Or
can one program a param with, let's say 100 chars, where the field is
only 50 chars ? The max charachters is limited by the maxlength property
of the textbox anyway.

Thanks once again for the answers and suggestions
Jerome
"Tibor Karaszi" <ti***************************@hotmail.nomail.co m>
schreef in bericht news:ea**************@TK2MSFTNGP14.phx.gbl...
I'm a database person, so from a database perspective:

Make sure the variable in the client is date datatype, not string.
Pass it though a command object and a parameter object to SQL Server =
you are safe. ADO will do the string conversion for you.
If you absolutely want to pass it as a string to SQL Server, read
http://www.karaszi.com/SQLServer/info_datetime.asp

--
Tibor Karaszi, SQL Server MVP
http://www.karaszi.com/sqlserver/default.asp
http://www.solidqualitylearning.com/
Blog: http://solidqualitylearning.com/blogs/tibor/
"Jerome" <Jo*****@fake.com> wrote in message
news:yw**********************@phobos.telenet-ops.be...
Hallo,
I know a lot has already been told about date/time fields in a database
but still confuses me, specif when dealing with SQLserver(Express).
It seems that sqlserver only accepts the date in a "yyyyMMdd" format?
(difference between Express and MSDE2000A ?)
What is the one and only true way to deal with this problem in VB2005:
Local settings are Dutch (Belgium) ; thus date is in "dd/MM/yy" (or
perhaps dd/MM/yyyy) and time in "hh:mm:ss"

dim MyDateVar as string, MyIdVar as Integer
dim MyCommand = New Sqlcommand("",Connection)
MyCommand.commandtext = "Update MyTable Set MyDatefield = '" &
MyDateVar & "' Where MyIdField = " & MyIdVar = SomeIntegerValue
MyCommand.executenonquery

How to deal with the MyDateVar when:

1.
The Variable comes from a textbox knowing that the user puts in
dd/MMyyyy
In this case there is no need to have the time with it.

2.
The date comes from a datetimepicker control
(MyDateVar = DtPicker.Value)?

3.
The date and time comes from the system
MyDateVar= Format(DateTime.Now, "yyyyMMdd") seems to work but
Format(DateTime.Now, "yyyyMMdd.hhmmss") gives a runtime error

So, any help and/or suggestion on this will be greatly appreciated.
Thanks and greetings to all
Jerome


Jan 26 '06 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Thomas Bartkus | last post: by
6 posts views Thread by Mark Reed | last post: by
2 posts views Thread by rivka.howley@gmail.com | last post: by
3 posts views Thread by RSB | last post: by
1 post views Thread by brino | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.