我使用以下代码创建数据表,然后写回SQL数据库。
如您所见,我将日期值转换为类型103,因此它应该是dd / mm / yyyy。
如果我查看数据表,它的格式正确,但当它写回SQL数据库时,该值将存储为yyyy-mm-dd
创建数据表(dt)的代码:
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的代码:
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 :(得分:0)
您的代码应该处理日期的呈现方式,而不应该真正关心SQL如何存储数据。由于您希望日期以dd/mm/yyyy
格式表示,请在相应的网格列上设置显示格式。例如:
DataGridView1.Columns("FromDate").DefaultCellStyle.Format = "dd/MM/yyyy"
这会将存储在DataTable
(被推回到SQL)中的数据保存为日期,但会以您想要的格式显示。
更多信息可以解释您实际收到错误的原因:
SQL Server始终以yyyy-mm-dd
格式表示日期。您可能已经注意到,您实际上可以使用以下内容将值写入日期字段:
UPDATE MyTable
SET DateField = '2014-11-10' -- This will store a date for Nov 10, 2104.
WHERE Id = 132
但是,如果您尝试更新mm/dd/yyyy
或dd/mm/yyyy
中的相同日期,则SQL可能会“混淆”,因为它不知道您想要的格式是前者还是后者。
-- This is dangerous.
UPDATE MyTable
SET DateField = '11/10/2014' -- Is this Nov 10, 2014 or Oct 11, 2014?
WHERE Id = 132