我试图通过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/2016
为MM/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)
出于某种原因,我总是收到错误:
从字符串
转换日期和/或时间时转换失败
我尝试将我的日期转换为多种字符串格式,但没有任何效果。
感谢您提供任何有用的信息。
答案 0 :(得分:0)
试试这个:
Dim dateString As String = dt.ToString("MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture)
另请点击以下链接获取更多帮助:
答案 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日期类型的任何内容。