通过TableAdapter vb.net将日期插入SQL Server数据库

时间:2014-09-17 14:31:52

标签: c# sql .net vb.net tableadapter

我试图通过TableAdapter在我的数据库中插入一行。

该表定义如下:

CREATE TABLE [dbo].[Grinding]
(
    [RMID] [int] NOT NULL,
    [BatchID] [int] IDENTITY(1,1) NOT NULL,
    [Batch] [varchar](max) NOT NULL,
    [TotalAmount] [numeric](18, 8) NOT NULL,
    [Expired] [date] NULL,
    [Portions] [int] NOT NULL,
    [StartingTime] [date] NULL,
    [EndTime] [date] NULL,
    [IsFinished] [bit] NOT NULL,
    [Canceled] [bit] NOT NULL,
    [Remarks] [varchar](max) NOT NULL,
    [Experiment] [bit] NOT NULL,
)

TableAdapter上的查询如下:

INSERT INTO Grinding (RMID, Batch, TotalAmount, Portions, IsFinished, Canceled, Remarks, Experiment, Expired)
VALUES (?,?,?,?,?,?,?,?,?)

我从textBox中获取日期值,然后以这种格式插入日期:05/10/2016MM/dd/yyyy

然后在我的代码中我这样做:

Dim dt As DateTime = txtValidity.Text
Dim dateString As String = dt.ToString("MMddyyyy") 'CONVERT TO SQL DATE FORMAT

然后我插入TableAdapter:

da.InsertQuery(Materials, Batch, Amount, Portions, False, False, 
               Remarks, Experiment, dateString)

出于某种原因,我总是收到错误:

  

从字符串

转换日期和/或时间时转换失败

我尝试将我的日期转换为多种字符串格式,但没有任何效果。

感谢您提供任何有用的信息。

3 个答案:

答案 0 :(得分:0)

试试这个:

Dim dateString As String = dt.ToString("MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture)

另请点击以下链接获取更多帮助:

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

答案 1 :(得分:0)

更改表列以存储日期对象,而不是日期字符串。让.net和sql处理转换。你没理由这么做。

但是,sql日期字符串格式可以不同。对于我的设置,它是' YYYY-MM-DD'或者' YYYY-MM-DD hh:mm:ss:000'

答案 2 :(得分:0)

如上所述,Expired是您尝试传递字符串时的日期。转到tableadapter属性页面并展开" InsertCommand"最后一行是"参数"。点击" ..."在"(收集)之后打开"参数集合编辑器"单击所有类型为Date的参数并更改" DBType"到DateTime2。单击“确定”。现在你可以传递一个日期参数,而不必乱用字符串。

只要txtValidity.Text是有效日期,Expired参数就是CType(txtValidity.Text,Date)

顺便说一句,我假设你使用的是SQL Server。如果您使用的是Access,那么日期参数的类型应该只是Date ...我想。自从我在Access工作以来,这是一段漫长的时间。只需将参数更改为调用Access日期类型的任何内容。