2014-12-27 4 views
0

다음 코드를 사용하여 데이터 테이블을 만든 다음 SQL 데이터베이스에 다시 쓰는 중입니다.데이터 테이블에서 SQL Server로 쓸 때 데이터가 잘못 저장되는 경우

나는 알 수 있듯이 날짜 값을 103으로 변환하므로 dd/mm/yyyy 여야합니다.

나는 데이터 테이블을 볼 경우 올바른 형식이지만 SQL 데이터베이스에 다시 기록 할 때 값이 데이터 테이블 (DT)을 만들 YYYY-MM-DD로

코드를 저장하는 중입니다

    Dim conn9 As New SqlClient.SqlConnection 
        With conn9 
         .ConnectionString = "server=inlt01\SQLEXPRESS; database=DaisyBilling; integrated security=yes" 
         .Open() 
        End With 

        Dim cmd9 As New SqlClient.SqlCommand 
        With cmd9 
         .CommandText = "SELECT [CustomerCLI], LEFT(MIN(DATENAME(MONTH,[CallDate])),3) AS [Short Month Name], [CustomerLookup], [CustomerName], ROUND (SUM ([SalesPrice]),2) as [Sum of Buy Price], ROUND (SUM ([Sell Price]),2) as [Sum of Sell Price],[Tariff Lookup],[Qty],[LineDescription],[Billingmonth], (SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(MAX ([CallDate]))-1),MAX ([CallDate])),103)) AS FromDate, (SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,MAX ([CallDate])))),DATEADD(mm,1,MAX ([CallDate]))),103)) as ToDate FROM [DaisyBilling].[dbo].[" + TextBox1.Text + "] GROUP BY [CustomerCLI], [CustomerLookup],[CustomerName],[Tariff Lookup],[Qty],[LineDescription],[Billingmonth] ORDER BY [CustomerLookup]" 
         .CommandType = CommandType.Text 
         .CommandTimeout = 30 
         .Connection = conn9 
        End With 
        Dim dt As New DataTable 
        dt.Load(cmd9.ExecuteReader) 

        With ViewBillForm.DataGridView1 
         .AutoGenerateColumns = True 
         .DataSource = dt 
        End With 

        cmd9.Dispose() 
        cmd9 = Nothing 

코드 SQL dB에 DataTable을 내보내려면 :

    Dim conn2 As New SqlClient.SqlConnection 
        With conn2 
         .ConnectionString = "server=inlt01\SQLEXPRESS; database=MasterBill; integrated security=yes" 
         .Open() 
        End With 

        Using copy As New SqlBulkCopy(conn2) 

         copy.DestinationTableName = "dbo.DaisyCallsCurrentBill" 
         copy.WriteToServer(dt) 

        End Using 

        conn.Close() 
        conn.Dispose() 

어떻게 다시 데이터베이스에 기록 될 때 제 값을 제대로 저장할 수 있습니까?

감사

+0

왼쪽의 코드를 포맷하십시오. – Paparazzi

답변

0

날짜가 제시 정말 데이터를 SQL에 의해 저장되는 방법과 관련해서는 안됩니다 어떻게 처리해야 귀하의 코드입니다. dd/mm/yyyy 형식으로 날짜를 표시하려면 각 그리드 열에 표시 형식을 설정하십시오. 예를 들어 :

DataGridView1.Columns("FromDate").DefaultCellStyle.Format = "dd/MM/yyyy" 

이 날짜로 (SQL 다시 밀어) 당신의 DataTable에 저장된 데이터를 유지하지만, 당신이 원하는 형식으로 제시한다.

조금 더 많은 정보는 당신이 실제로 오류가 발생하는 이유를 설명 할 수 있습니다

SQL 서버는 항상 yyyy-mm-dd 형식으로 날짜를 나타냅니다. 당신도 mm/dd/yyyy 또는 dd/mm/yyyy 다음 SQL은 "혼란"얻을 수있는 동일한 날짜를 업데이트하려고한다면 그러나

UPDATE MyTable 
SET DateField = '2014-11-10' -- This will store a date for Nov 10, 2104. 
WHERE Id = 132 

: 당신은 당신이 실제로 이런 식으로 뭔가를 사용하여 날짜 필드에 값을 쓸 수있는 것으로 나타났습니다 수 있습니다 원하는 형식이 전자인지 아니면 후자인지 알 수 없기 때문입니다.

-- This is dangerous. 
UPDATE MyTable 
SET DateField = '11/10/2014' -- Is this Nov 10, 2014 or Oct 11, 2014? 
WHERE Id = 132 
관련 문제