如何修复标准表达式访问日期时间中的vb.net错误数据类型不匹配 [英] how to fix vb.net error data type mismatch in criteria expression access date time

查看:79
本文介绍了如何修复标准表达式访问日期时间中的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 the StockDate.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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆