使用 vb.net 的字符串 sql 格式不正确插入失败?如何
Posted
技术标签:
【中文标题】使用 vb.net 的字符串 sql 格式不正确插入失败?如何【英文标题】:String sql is not in correct format insertion fails using vb.net?How 【发布时间】:2015-12-18 15:26:57 【问题描述】:我是 vb.net 的新手,我有 sqlcommand 字符串,如图所示
Dim query As [String] = "insert into tblDefProducts( Creation_Date, Product_code,line_item_id , item_name , category_id , subcategory_id , Gender ,LifeType, supplier_id , Acquire_type , Purchase_type , Manufacture_type , Pur_Con_Unit, Pur_Con_factor ,Tax_At_Retail_Price, Sale_Tax ,Average_cost ,Product_group_id,status,Technical_details )
values( " & DateTimePicker2.Value.ToString() & ",'" & PCode_TXT.Text & "','" & LineItem_TXT.Text & "' , '" & PName_TXT.Text & "','" & CategoryM_CMB.Text & "','" & CategoryS_CMB.Text & "','" & ProductGender_TXT.Text & "', '" & ProductLifeT_CMD.Text & "','" & ProductSupplier_CMB.Text & "','" & PAquireType_CMB.Text & "', '" & PPurchaseType_CMB.Text & "','" & PManufacturing_CMB.Text & "','" & PConnUnit_CMB.Text & "' ," & Convert.ToInt32(PConFactory_TXT.Text) & "," & Convert.ToInt32(PSalesTaxPurchase_TXT.Text) & "," & Convert.ToInt32(PSalesTaxSales_TXT.Text) & "," & Convert.ToInt32(PPRICE_TXT.Text) & " , " & PTypeA & " , " & pActive & ",'" & PTechnicalDetail_TXT.Text & "')"
2 个问题
输入字符串的格式不正确 将 datetime 值从 datetimepicker1 第二次插入到数据库列 creation_date 具有数据类型 DateTime 但 datetimepicker 给出值 #1/1/1900# 还得用sql解析
【问题讨论】:
使用sql参数代替字符串连接。String
周围的大括号不是必需的。
As String 不是必须的
这些值需要像这样的单引号 values('a','b','c')。您的代码在每个术语周围没有单引号。单引号在错误的地方。
使用@error 必须声明标量变量。
【参考方案1】:
使用字符串连接来传递参数并不是一个好主意,原因有很多:它容易受到 SQL 注入攻击,更容易出错并且更难阅读和维护。
在您的问题中,问题可能是由于您的某些值周围缺少 ''。
想象一下,如果您只希望用户能够更新表中的某些字段,但用户在文本框中键入了诸如“Hello', ReadOnlyField = 'World”之类的内容,然后您将其连接到您的查询中。 ReadOnlyField 世界被更新。使用参数可以防止这种情况发生。
如果您改用参数,则无需担心 '',因为参数是类型变量而不是字符串。
您也不需要将所有内容都转换为字符串,因为大多数 .NET 基元都有 SQL 等效项。
有关 VB.Net SqlCommand.Parameters 的示例和文档,请参见此处
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters%28v=vs.110%29.aspx
【讨论】:
而且也不需要将日期值转换为字符串【参考方案2】:如果您有一个不是string
、int
或任何其他原语类型的数据库列,则不应在不使用 ado.net 参数系统的情况下传递值(千万不要!)。因为如果您使用01.01.2015
而不是System.DateTime
,数据库必须将日期从字符串解析为日期时间/时间戳,这通常会导致问题,因为日期不是结构化形式并且转换失败。一般来说,永远不要使用字符串连接传递参数。另一个原因是,这使得 sql 注入非常容易,并且不如使用 ado.net 参数系统稳定。
【讨论】:
这取决于很多这个。数据库文化/语言,应用文化语言,...【参考方案3】:我看到的一件事是
Dim query As [String] = "insert into tblDefProducts( Creation_Date, Product_code,line_item_id , item_name , category_id , subcategory_id , Gender ,LifeType, supplier_id , Acquire_type , Purchase_type , Manufacture_type , Pur_Con_Unit, Pur_Con_factor ,Tax_At_Retail_Price, Sale_Tax ,Average_cost ,Product_group_id,status,Technical_details )
values( '" & DateTimePicker2.Value.ToString("yyyyMMdd") & "','" & PCode_TXT.Text & "','" & LineItem_TXT.Text & "' , '" & PName_TXT.Text & "','" & CategoryM_CMB.Text & "','" & CategoryS_CMB.Text & "','" & ProductGender_TXT.Text & "', '" & ProductLifeT_CMD.Text & "','" & ProductSupplier_CMB.Text & "','" & PAquireType_CMB.Text & "', '" & PPurchaseType_CMB.Text & "','" & PManufacturing_CMB.Text & "','" & PConnUnit_CMB.Text & "' ," & Convert.ToInt32(PConFactory_TXT.Text) & "," & Convert.ToInt32(PSalesTaxPurchase_TXT.Text) & "," & Convert.ToInt32(PSalesTaxSales_TXT.Text) & "," & Convert.ToInt32(PPRICE_TXT.Text) & " , " & PTypeA & " , " & pActive & ",'" & PTechnicalDetail_TXT.Text & "')"
【讨论】:
以上是关于使用 vb.net 的字符串 sql 格式不正确插入失败?如何的主要内容,如果未能解决你的问题,请参考以下文章