【问题标题】:'Conversion from string "dd-MM-YYYY" to type 'Integer' is not valid.''从字符串 "dd-MM-YYYY" 到类型 'Integer' 的转换无效。'
【发布时间】:2020-04-04 08:31:12
【问题描述】:

我有一个使用 SQL 数据库的插入查询。插入查询效果很好,但是当我使用 DateTimePicker 时,它会显示上面的错误消息。
你能告诉我如何在插入查询中使用 DateTimePicker 吗?

    Public Function SearchData(ByVal qr As String) As DataSet
        da = New SqlDataAdapter(qr, con)
        ds = New DataSet
        da.Fill(ds)
        Return ds
    End Function

    Private Sub SaveEmp_Click(sender As Object, e As EventArgs) Handles SaveEmp.Click

        Dim ms As New MemoryStream
        PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
        Dim img() As Byte
        img = ms.ToArray()

        Dim insertquery As String = "Insert into AddNew(Userid,EmpSalary,EmpName,FatherName,EmailAddress,BankAccount,HomeAddress,PersonalMobile,DateofBirth,EmpImage) values(" & EmpID.Text _
 & "," & EmpSalary.Text & ",'" & EmpName.Text & "','" & FatherName.Text & "','" & EmailAddress.Text & "'," & BankAccount.Text & ",'" & HomeAddress.Text & "'," & PersonalMobile.Text & ",'" & DtpDOB.Value.Date.ToShortDateString("dd-MM-YYYY") & "',@img)"

        Dim cmd As New SqlCommand(insertquery, con)
        cmd.Parameters.Add("@img", SqlDbType.Image).Value = img
        ExecuteMyQuery(cmd, "Image Inserted")
    End Sub

【问题讨论】:

  • 您应该为要插入数据库的每个值创建一个参数。正如您现在对图像字段所做的那样。通过这种方式,您可以避免 Sql Injection 黑客攻击,并且您不需要将日期时间值转换为字符串格式,您的数据库可以将其转换回数据时间以正确理解传递的值
  • 谢谢,亲爱的史蒂夫,我会做的,然后检查会发生什么。再次感谢亲爱的您的时间。快乐。
  • 您的 DateOfBirth 字段似乎也是一个整数?您打算如何将日期时间值存储在整数字段中?另一方面,电话号码永远不是数字。如果您有一个以 0 开头的电话号码,则该零将在数字字段中被修剪掉
  • Dear DateOfBirth field datatype is = Date in sql 现在我已经创建了参数,但还有一个错误显示给我。请在下面检查。
  • Dim insertquery As String = "插入 AddNew(Userid,EmpSalary,EmpName,FatherName,EmailAddress,BankAccount,HomeAddress,PersonalMobile,DateofBirth,EmpImage) 值(@EmpID,@EmpSalary,@EmpName,@父亲姓名,@EmailAddress,@BankAccount,@HomeAddress,@PersonalMobile,@DtpDOB,@img)"

标签: sql-server vb.net date visual-studio-2019 datetimepicker


【解决方案1】:

要回答所提出的问题,这部分代码没有意义:

DtpDOB.Value.Date.ToShortDateString("dd-MM-YYYY")

您应该已经阅读了相关文档并自己解决了问题。那会告诉您ToShortDateString 方法没有参数。该方法的重点是它使用当前系统的标准短日期格式返回指定的日期。这个:

DtpDOB.Value.Date.ToShortDateString()

等价于:

DtpDOB.Value.Date.ToString("d")

如果你想要一个特定的格式,不管系统设置如何,那么你需要调用ToString并传递适当的自定义格式字符串:

DtpDOB.Value.Date.ToString("dd-MM-YYYY")

实际发生的情况是编译器正在对您要完成的工作做出最佳猜测,并认为您正在尝试索引ToShortDateString 返回的String,即

DtpDOB.Value.Date.ToShortDateString()("dd-MM-YYYY")

或者像这样:

Dim str As String = DtpDOB.Value.Date.ToShortDateString()
Dim ch As Char = str("dd-MM-YYYY")

这失败了,因为索引需要 Integer 并且该格式字符串无法转换为 Integer,因此出现错误消息。

除了使用 ADO.NET 的参数,使格式无关紧要外,您还应该在项目属性和 IDE 选项中打开 Option Strict On

【讨论】:

  • 谢谢你,亲爱的,你真的是好人和天才,因为你是很好的老师,在我心里非常感谢你。
  • 亲爱的,现在我使用了这个代码“ & DtpDOB.Value.Date.ToString("dd-MM-yyyy") & " 现在代码运行成功但是结果只显示在这样的年份-2020 现在什么我愿意。
  • 个人手机中的另一个问题,这里是同样的问题,这里只显示不显示但不显示移动代码我的意思是完整的我在这样的文本框中输入完整的不 0300-5752693 但结果只显示在数据库表中像这样 -5752693 为什么不显示完整的 no
  • 您可能应该使用任何相关的新信息更新您的问题。
  • @ob 我想知道您是否以数字形式存储了日期,因此最终得到了 4-4-2020(4 减 4 减 2020 = 负 2020)。使用参数就像那个人说的!阅读bobby-tables.com
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多