Solved

DateTime column not converting to correct format?

Posted on 2015-01-12
19
88 Views
Last Modified: 2015-02-03
I have a Windows app that for some reason isn't converting a DateTime column over to the correct format. The column is defined in a SQL Server 2008 DB as a "DateTime" datatype. In my VB.Net app, I've created a table with it's associated columns and defined the particular date column the same as such:  

dbCreepData.Columns.Add("startTime", System.Type.GetType("System.DateTime"))

Open in new window


My SQL statement looks like the following. I tried 2 different ways of retrieving the date. These statements were ran in the SSMS.

SELECT creep_ID,runNO,intervalPoint,output,[error],CONVERT(DateTime,startTime,9) AS startTime,printOnCert FROM TEST_DETAILS_Creep WHERE creep_ID = 66
SELECT creep_ID,runNO,intervalPoint,output,[error],CONVERT(DateTime,startTime,109) AS startTime,printOnCert FROM TEST_DETAILS_Creep WHERE creep_ID = 66

Open in new window


The problem that I'm having is that the App needs to display the "startTime" like this:  1/12/2015 08:34:08

What it's doing is displaying the "startTime" like this:  1/12/2015 08:34 AM

As far as using the CONVERT statement in my SQL script, I've tried the format of 109 and it still doesn't work. I'm not doing any kind of data manipulation when I assign the DataTable to the DataGridView's datasource. Here is what that logic looks like. "bsCreep" is just a BindingSource.

            bsCreep.DataSource = EH.DataSet.Tables(0)
            bsCreep.Filter = "runNO = " & iCreepRunIDX
            dgvCreep.DataSource = bsCreep
            dgvCreep.AutoResizeColumns()

Open in new window

0
Comment
Question by:BlakeMcKenna
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 9
  • 7
  • 3
19 Comments
 
LVL 34

Expert Comment

by:Mike Eghtebas
ID: 40545121
You can do the conversion at your application like:
Imports System.Globalization


Dim dt As DateTime = "1/12/2015 08:34 AM"
Console.WriteLine(dt.ToString("dd/MM/yyyy hh:mm:ss", CultureInfo.InvariantCulture))

of course replacing dt here with your value from SQL.
0
 

Author Comment

by:BlakeMcKenna
ID: 40545350
I'd rather find out why it's doing what it's doing.

When I run the query in SMSS, the data looks as it should. It only looks different once it's loaded into the DataGridView.
0
 
LVL 34

Expert Comment

by:Mike Eghtebas
ID: 40545461
Basically dates, regardless of their format, are the same. GV takes the dates and based on its present format property treat it accordingly. This means the format in SQL doesn't matter unless you treat it (convert it) to string. That way, the gridview column being also string, will show it as you want it to.
0
Free eBook: Backup on AWS

Everything you need to know about backup and disaster recovery with AWS, for FREE!

 
LVL 34

Expert Comment

by:Mike Eghtebas
ID: 40545511
I think, all you have to do is treat this date as string in your gv not as a date.


This comment is revised.
0
 
LVL 34

Assisted Solution

by:Mike Eghtebas
Mike Eghtebas earned 334 total points
ID: 40545577
I did test vartype in SQL Server:
declare @dt datetime
set @dt='11/11/2015 11:15:16 PM'
select convert(varchar(19), @dt, 109) 

if cast(sql_variant_property(convert(varchar(25), @dt, 109),'BaseType') as varchar(19))  = 'varchar'
print 'yes'
else
print 'no'

Open in new window


This prints yes meaning it is in string in SQL Server. Make sure your gv property for this date column  is also set to text.
0
 
LVL 50

Assisted Solution

by:Vitor Montalvão
Vitor Montalvão earned 166 total points
ID: 40546975
Why do you need to convert in SQL Server? Why not return the columns as they are?
SELECT creep_ID,runNO,intervalPoint,output,[error],startTime,printOnCert 
FROM TEST_DETAILS_Creep 
WHERE creep_ID = 66

Open in new window

0
 
LVL 34

Expert Comment

by:Mike Eghtebas
ID: 40546989
Because he want to display like 23/12/2015 08:34:08 not 11/12/2015 08:34:08 PM.
0
 
LVL 50

Expert Comment

by:Vitor Montalvão
ID: 40546998
The display is on the datagrid not in SQL Server. He can format it in the datagrid.
0
 

Author Comment

by:BlakeMcKenna
ID: 40547108
If you look at the Image I've attached, please see the "Time" column. I just need for the "Seconds" to show up in this format. When these records are being added thru the VB.Net app, I'm simply assigning "Now" to a variable that is defined as DateTime and when it displays on the DGV, it appears with the "Seconds" (just like I want it).

The difference is when I retrieve this record from the DB, it comes out like you see in the attached image.
DataGridView.JPG
0
 
LVL 34

Expert Comment

by:Mike Eghtebas
ID: 40547185
What is the property of your Time column in the gv? It should be text not date. This is because you already have converted it to string in the sql.

If Time column has property of date not text, then it grabs the date value from sql and treats it as date and in the absence of user defined format, it gets displayed in default format which you see in the image you have attached.

The sure way for all these is to add format at the gv as mentioned in my second post at the top.
0
 

Author Comment

by:BlakeMcKenna
ID: 40547227
I had it defined as System.DateTime but then I dropped the DataType altogether. It should default as System.String. Even though I did this....it still displays the same as in the Image.
0
 

Author Comment

by:BlakeMcKenna
ID: 40547228
Here is the routine where I setup the HeaderText.

    Private Sub BuildCreepGrid()
        Try
            EH.ErrorMessage = String.Empty

            dgvCreep.Columns(0).HeaderText = "Creep ID"
            dgvCreep.Columns(1).HeaderText = "Run"
            dgvCreep.Columns(2).HeaderText = "Interval"
            dgvCreep.Columns(3).HeaderText = "Output (" & cmbOutputUnit.Text & ")"
            dgvCreep.Columns(4).HeaderText = "Error (%)"
            dgvCreep.Columns(5).HeaderText = "Time"
            dgvCreep.Columns(6).HeaderText = "printOnCert"

            dgvCreep.Columns(0).Visible = False
            dgvCreep.Columns(1).Visible = False
            dgvCreep.Columns(6).Visible = False

        Catch ex As Exception
            EH.ErrorMessage = "frmCalibration_3/BuildCreepGrid() - " & ex.Message & "...Contact Engineering!" & "~E"
        End Try
    End Sub

Open in new window

0
 

Author Comment

by:BlakeMcKenna
ID: 40547230
I even have a routine that formats that "Time" cell. I do it like this:

    dRow.Cells(5).Value = String.Format(dRow.Cells(5).Value, "General Date")

Open in new window

0
 

Author Comment

by:BlakeMcKenna
ID: 40585156
Where is the "Request Attention" button?
0
 
LVL 34

Accepted Solution

by:
Mike Eghtebas earned 334 total points
ID: 40585214
see:
RequestAttention
0
 

Author Comment

by:BlakeMcKenna
ID: 40586198
I'm gonna guess it's somewhere just not where your saying. I looked at the top of this page at my original post as well as exited this post and selected it from the sidebar and it still wasn't there...
0
 
LVL 50

Expert Comment

by:Vitor Montalvão
ID: 40586219
It's really there, Blake. Just check on the top of the first comment on this question.
0
 

Author Comment

by:BlakeMcKenna
ID: 40587178
Now I see it. I didn't scroll down far enough.

Thanks Vitor!
0
 

Author Closing Comment

by:BlakeMcKenna
ID: 40587188
This is no longer an issue. Thank you guys for your inputs. We ended up removing this column from the dgv altogether...
0

Featured Post

Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
NetCrunch network monitor is a highly extensive platform for network monitoring and alert generation. In this video you'll see a live demo of NetCrunch with most notable features explained in a walk-through manner. You'll also get to know the philos…
Michael from AdRem Software outlines event notifications and Automatic Corrective Actions in network monitoring. Automatic Corrective Actions are scripts, which can automatically run upon discovery of a certain undesirable condition in your network.…

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question