vb.net和MSSQL的日期时间问题

时间:2016-05-18 05:55:33

标签: sql-server vb.net winforms

我一直在vb.net中创建一个桌面表单,其中我使用了datetime-picker工具。我想要一种 dd / MM / yyyy 的格式,所以我保留了datetimepicker属性的格式。

但是当我试图将记录从vb.net插入MSSQL时,很明显会向我显示SQL异常:

  从字符串转换日期和/或时间时,

转换失败。

因为MSSQL支持一些ISO格式和所有。(MM / dd / yyyy,接受并正确运行,我试过这个)。

所以我想将日期转换为vb.net,将其存储在声明为' date'的变量中。或者' datetime' (尝试两者),进入可接受的格式并将变量插入到Sql Command中。

我用以转换日期的以下命令。

1) Fdt = Date.ParseExact(From_Dt.Text, "MM/dd/yyyy", Globalization.CultureInfo.InvariantCulture)-------- Searched the internet and got this stuff.

2) Fdt = Convert.ToDateTime(From_Dt.Text)

3) #" & format(DateTimePicker1.Value.Date) & "# ----directly inside the sqlcommand in vb.net.

以及我现在没有发布的许多其他功能。

我没有得到一件事,以上都工作并给了我MM / dd / yyyy的结果(通过在运行时添加监视来检查)但它仍然给了我相同的异常,但是如果我从datetimepicker属性更改日期格式到MM / dd / yyyy然后sqlquery被毫无例外地接受..

即使我将字段的数据类型逐个尝试到date / datetime / datetime2(7)。

甚至尝试通过一些转换/投射函数直接转换为SQLQuery,但我得到了同样的例外。

但是他们都没有工作,我提到了许多链接,这个问题可能与其他问题类似,但我没有找到任何解决方案,所以我最后不得不创建这个问题。

触发查询的代码:

Try
        'Dim Fdt As DateTime, Tdt As DateTime
        'Fdt = Date.ParseExact(From_Dt.Text, "yyyy-MM-dd", Globalization.CultureInfo.InvariantCulture)
        'Tdt = Date.ParseExact(To_Dt.Text, "yyyy-MM-dd", Globalization.CultureInfo.InvariantCulture)
        'Fdt = Convert.ToDateTime(From_Dt.Text)
        'Tdt = Convert.ToDateTime(To_Dt.Text)
        If txtCompName.Text <> nothing And cmbCompType.Text <> nothing Then
            If CheckEof("select * from Company where Comp_Year = '" & Year1 & "' and Comp_Code = '" & txtCompCode.Text & "'", con) Then
                cmd = New SqlCommand(("insert into Company (Comp_Year, Comp_Code, Comp_Name, Comp_Prop, Comp_Add1, Comp_Add2, Comp_City, Comp_Phone, Comp_FAX, Comp_GST, Comp_CST, Comp_PNR, Comp_TDSNo, Comp_DrugLIC1, Comp_DrugLIC2, Comp_Mess1, Comp_Mess2, Comp_FDT, Comp_TDT, Comp_Distribution, Comp_Juridiction, Comp_Type) values('" &
                Year1 & "','" & txtCompCode.Text & "','" & txtCompName.Text & "','" & txtCompShtName.Text & "','" &
                txtCompAdd1.Text & "','" & txtCompAdd2.Text & "','" & txtCompCity.Text & "','" & txtCompPhno.Text & "','" &
                txtCompMobile.Text & "','" & txtCompGST.Text & "','" & txtCompCST.Text & "','" & txtCompPAN.Text & "','" &
                txtCompTDS.Text & "','" & txtCompDrg1.Text & "','" & txtCompDrg2.Text & "','" & txtCompMsg1.Text & "','" &
                txtCompMsg2.Text & "','" & From_Dt.Value & "','" & To_Dt.Value & "','" & txtCompDist.Text & "','" &
                txtCompJuri.Text & "','" & cmbCompType.Text & "')"), con)
            End If
            ExecuteQuery()
            MsgBox("Company Created SuccessFully,", MessageBoxIcon.Information)
            CompCreation_Reset()
        Else
            MsgBox("Mandatory fields cannot be Blank", MessageBoxIcon.Stop)
            txtCompName.Focus()
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

1 个答案:

答案 0 :(得分:6)

Winforms DateTimePicker有一个名为Value

的{{1}}类型属性

.Net Datetime maps directly到sql server datetime,自datetime stores no display format以来,您不必担心表示层的格式一点都不。

只需将value属性作为参数传递给sql语句。进一步阅读:How do I create a parameterized SQL query? Why Should I?