Dim SALESINSERT As New SqlCommand("INSERT INTO Tbl_Sales (Sale_id, Transaction_No, Customer_id, Item_id, Amount, Date) VALUES(" _
& SalesIdMax + 1 & "," & Transaction_label.Text & "," & 1 & "," & Label4.Text & "," & TextBox1.Text & _
"," & DateTimePicker1.Value.Date & ")", sqlcon)
sqlcon.Open()
SALESINSERT.ExecuteNonQuery()
sqlcon.Close()
SALESINSERT = Nothing
我有这个代码。一切正常,但问题在于日期。由于某种原因,它每次都插入相同的日期:“1/1/1900”。
当我调试代码以查看SQL命令文本时它很好并且日期很好并且我在SQL查询中执行它并且完全正常。
但是在VB中却没有。
我不知道为什么它不起作用。
我可以提出修复建议。
答案 0 :(得分:1)
使用单引号作为日期值",'" & DateTimePicker1.Value.Date & "')"
或者
",#" & DateTimePicker1.Value.Date & "#)"
答案 1 :(得分:1)
如果您始终使用参数化查询,那么您将避免将日期表示为字符串的问题。
您可以使用SQL参数(我必须猜测数据库列数据类型)来查询您的查询:
Dim salesinsert As New SqlCommand("INSERT INTO Tbl_Sales ([Sale_id], [Transaction_No], [Customer_id], [Item_id], [Amount], [Date])" &
" VALUES(@SaleId, @TransactionNo, @CustomerId, @ItemId, @Amount, @Date)", sqlcon)
salesinsert.Parameters.Add(New SqlParameter With {.ParameterName = "@SaleId", .SqlDbType = SqlDbType.Int, .Value = SalesIdMax + 1})
salesinsert.Parameters.Add(New SqlParameter With {.ParameterName = "@TransactionNo", .SqlDbType = SqlDbType.NVarChar, .Size = 20, .Value = Transaction_label.Text})
salesinsert.Parameters.Add(New SqlParameter With {.ParameterName = "@CustomerId", .SqlDbType = SqlDbType.Int, .Value = 1})
salesinsert.Parameters.Add(New SqlParameter With {.ParameterName = "@ItemId", .SqlDbType = SqlDbType.NVarChar, .Size = 20, .Value = Label4.Text})
salesinsert.Parameters.Add(New SqlParameter With {.ParameterName = "@Amount", .SqlDbType = SqlDbType.Decimal, .Value = CDec(TextBox1.Text)})
salesinsert.Parameters.Add(New SqlParameter With {.ParameterName = "@Date", .SqlDbType = SqlDbType.DateTime, .Value = DateTimePicker1.Value})
sqlcon.Open()
salesinsert.ExecuteNonQuery()
sqlcon.Close()
salesinsert.Dispose()
SALESINSERT = Nothing
- 而是使用salesinsert.Dispose()
,因为这会正确清理非托管资源。.SqlDbType
(和.Size
表示字符串)以匹配数据库列的数据类型。十进制值应该也可以定义.Scale
和.Precision
。TextBox1
并不表示其中会有一定数量。答案 2 :(得分:0)
问题在于给定日期的格式。您可以通过使用.ToString()
格式化dateTime输入来解决此问题。即。,
DateTimePicker1.Value.Date.ToString("yyyy-MM-dd HH:mm:ss")
然后出现injection的真正问题;为避免您必须使用parameterised queries代替仅文本查询。
答案 3 :(得分:0)
使用这个 Dim SALESINSERT As New SqlCommand("INSERT INTO Tbl_Sales (Sale_id, Transaction_No, Customer_id, Item_id, Amount, Date) VALUES(" _ & SalesIdMax + 1 & "," & Transaction_label.Text & "," & 1 & "," & Label4.Text & "," & TextBox1.Text & _ ",CONVERT(DateTime,'09/07/2021',103))", sqlcon)