-1 vb.net sql-server datetimepicker
我正在使用 Visual Basic.NET、SQL Server 2016、Visual Studio 2017 制作 Windows 窗体。
我一直在尝试解决这个问题,并且已经set dateformat mdy在 SQL Server Management Studio 查询中尝试过,但是表上的日期仍然采用这种格式:2022-07-17 00:00:00.000。在运行项目时尝试插入某些内容时,这与此错误有什么关系吗?
每个人都说“日期时间不适用于 yy/mm/dd 或 dd/mm/yy,请使用 mm/dd/yy”。但没有人说你如何在数据库或 Visual Studio 中实际更改/修复它。
当我在其他语言上学习和做事情时,我在使用 MySQL 时从未发现过这个错误,所以这个日期时间的事情真的变得令人绝望。非常感谢任何有关如何实际修复此错误的见解。
代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim someid As Integer = TextCode.Text
Dim descri As String = TextDescription.Text
Dim somedate As DateTime = DateTimePickerinsert.Text
Dim value As String = TextValue.Text
Dim stock As String = TextStock.Text
Dim warehouse As String = ComboWarehouse.Text
con.Open()
Dim command As New SqlCommand("Insert into Item values('" & someid & "','" & descri & "','" & somedate & "','" & value & "','" & stock & "','" & warehouse & "')", con)
command.ExecuteNonQuery()
con.Close()
MessageBox.Show("Inserted succesfully")
LoadDataInGrid()
End Sub
Run Code Online (Sandbox Code Playgroud)
我明白了
System.Data.SqlClient.SqlException:'将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
该语句已终止。' 线路错误:command.ExecuteNonQuery()
您应该使用正确的参数化,将日期保留为实际DateTime值,而不是字符串,就像数字一样。否则你会遇到 SQL 注入问题,这不仅仅是一个安全问题,而且还关系到正确性。
在发送参数值之前SqlDbType,应将其转换为正确的类型,并且参数对象也应使用正确的精度/长度进行声明。
您还应该创建并处置连接对象,而不是保持全局连接打开,这是浪费的。自动连接池将确保有效使用可用连接。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim query As String = "
INSERT INTO Item (someid, descri, somedate, value, stock, warehouse)
VALUES (@id, @description, @date, @value, @stock, @warehouse)
"
Dim someid As Integer = Integer.Parse(TextCode.Text)
Dim somedate As DateTime = DateTimePickerinsert.Value
Dim value As Decimal = Decimal.Parse(TextValue.Text)
Dim stock As Integer = Integer.Parse(TextStock.Text)
Using con As new SqlConnection("YourConnectionString"),
command As New SqlCommand(query, con)
command.Parameters.Add("@id", SqlDbType.Int).Value = someid
command.Parameters.Add("@description", SqlDbType.VarChar, 100).Value = If(TextDescription.Text, DBNull.Value)
command.Parameters.Add("@date", SqlDbType.DateTime).Value = somedate
command.Parameters.Add("@value", SqlDbType.Decimal).Value = value
command.Parameters.Add("@stock", SqlDbType.Int).Value = stock
command.Parameters.Add("@warehouse", SqlDbType.VarChar, 50).Value = If(ComboWarehouse.Text, DBNull.Value)
con.Open()
command.ExecuteNonQuery()
End Using
MessageBox.Show("Inserted succesfully")
LoadDataInGrid()
End Sub
Run Code Online (Sandbox Code Playgroud)
至于在 SSMS 中查看结果:datetime值没有固有的格式。SSMS 将有默认的显示它们的方式,但是您可以通过使用 转换它们来以任何您喜欢的方式显示它们CONVERT,或者在 VB 中使用ToString
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |