如何修复标准表达式访问日期时间中的vb.net错误数据类型不匹配 [英] how to fix vb.net error data type mismatch in criteria expression access date time
本文介绍了如何修复标准表达式访问日期时间中的vb.net错误数据类型不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
Dim cb As String = 插入产品(ProductID,ProductName,ProductType,Category,Specification,Date3,UnitPrice )VALUES(@ d1,@ d2,@ d3,@ d4,@ d5,'#& StockDate.Text& < span class =code-string>#',@ d7)
cmd = 新 OleDbCommand(cb)
cmd.Connection = con
cmd.Parameters.Add( New OleDbParameter( @ d1,System.Data.OleDb.OleDbType.VarChar, 20 , ProductID))
cmd .Parameters.Add(新 OleDbParam eter( @ d2,System.Data.OleDb.OleDbType.VarChar, 250 , ProductName))
cmd。 Parameters.Add( New OleDbParameter( @ d3,System.Data.OleDb.OleDbType.VarChar, 250 , ProductType))
cmd.Parameters.Add( New OleDbParameter( @ d4,System.Data.OleDb.OleDbType.VarChar, 150 ,< span class =code-string> 类别))
cmd.Parameters.Add(新 OleDbParameter( @ d5,System.Data.OleDb.OleDbType.VarChar, 250 , 规范))
cmd.Parameters.Add( New OleDbParameter( @ d6,System.Data.OleDb.OleDbType。日期, StockDate))
cmd.Parameters.Add( New OleDbParameter( @ d7 ,System.Data.OleDb.OleDbType。 Double , 10 , UnitPrice))
cmd .Parameters( @ d1)。Value = ProductID.Text
cmd.Parameters( @ d2 )。Value = ProductName1.Text
cmd.Parameters( @ d3)。Value = ProductType1.Text
cmd.Parameters( @ d4) .Value = Category.Text
cmd.Parameters( @ d5)。Value = Specification.Text
md.Parameters( @ d6)。Value = StockDate.Text
cmd.Parameters( @ d7)。Value = CDbl (UnitPrice.Text)
解决方案
可能是因为你试图输入一个字符串值:'#你的日期#'
进入一个日期字段。
那么为什么 - 如果你知道参数化的查询是什么,你明确做了 - 你是直接创建一个问题***和***让您的数据库打开SQL注入攻击但不使用日期列的参数化查询?
将您的用户输入解析为DateTime值,并且将其作为参数传递 - 您的问题将消失,您将受到保护...
为什么使用字符串连接传递一个参数?您清楚地知道如何使用参数化查询,因为所有其他参数都正确传递,但您已选择使用字符串连接StockDate.Text
,留下您的代码容易受到 SQL注入 [ ^ ]。
修复漏洞,你将修复你的错误:
昏暗 cb 作为 字符串 = 插入产品(ProductID,ProductName,ProductType,Category,Specification,Date3,UnitPrice)VALUES(@ d1,@ d2,@ d3,@ d4,@ d5,@ d6,@ D7)跨度>
Dim cb As String = "insert into Product(ProductID,ProductName,ProductType,Category,Specification,Date3,UnitPrice) VALUES (@d1,@d2,@d3,@d4,@d5,'""#" & StockDate.Text & "#""',@d7)"
cmd = New OleDbCommand(cb)
cmd.Connection = con
cmd.Parameters.Add(New OleDbParameter("@d1", System.Data.OleDb.OleDbType.VarChar, 20, "ProductID"))
cmd.Parameters.Add(New OleDbParameter("@d2", System.Data.OleDb.OleDbType.VarChar, 250, "ProductName"))
cmd.Parameters.Add(New OleDbParameter("@d3", System.Data.OleDb.OleDbType.VarChar, 250, "ProductType"))
cmd.Parameters.Add(New OleDbParameter("@d4", System.Data.OleDb.OleDbType.VarChar, 150, "Category"))
cmd.Parameters.Add(New OleDbParameter("@d5", System.Data.OleDb.OleDbType.VarChar, 250, "Specification"))
cmd.Parameters.Add(New OleDbParameter("@d6", System.Data.OleDb.OleDbType.Date, "StockDate"))
cmd.Parameters.Add(New OleDbParameter("@d7", System.Data.OleDb.OleDbType.Double, 10, "UnitPrice"))
cmd.Parameters("@d1").Value = ProductID.Text
cmd.Parameters("@d2").Value = ProductName1.Text
cmd.Parameters("@d3").Value = ProductType1.Text
cmd.Parameters("@d4").Value = Category.Text
cmd.Parameters("@d5").Value = Specification.Text
md.Parameters("@d6").Value = StockDate.Text
cmd.Parameters("@d7").Value = CDbl(UnitPrice.Text)
解决方案
Probably because you are trying to put a string value:'#your date#'
into a date field.
So why - if you know what parametrized queries are, and you clearly do - are you directly creating a problem ***and*** leaving your DB open to SQL Injection attacks but not using a parameterized query for the date column as well?
Parse your user input into a DateTime value, and pass that as a parameter - your problem will go away, and you will be protected...
Why have you used string concatenation to pass one parameter? You clearly know how to use a parameterized query, since all of the other parameters are passed correctly, but you've chosen to use string concatenation for theStockDate.Text
, leaving your code vulnerable to SQL Injection[^].
Fix the vulnerability, and you will fix your error:
Dim cb As String = "insert into Product(ProductID,ProductName,ProductType,Category,Specification,Date3,UnitPrice) VALUES (@d1,@d2,@d3,@d4,@d5,@d6,@d7)"
这篇关于如何修复标准表达式访问日期时间中的vb.net错误数据类型不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文