一尘不染

使用vb.net,字符串sql格式不正确会导致插入失败?

sql

我是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进行解析


阅读 134

收藏
2021-05-16

共1个答案

一尘不染

由于许多原因,使用字符串替换来传递参数不是一个好主意:它容易受到SQL Injection攻击的影响,更容易出错并且更难以阅读和维护。

在您的问题中,问题很可能是由于您的某些价值观缺少“”。

想象一下,如果您只希望用户能够更新表中的某些字段,但是用户在文本框中输入了诸如“ Hello”,ReadOnlyField
=’World之类的内容,然后将其合并到查询中。ReadOnlyField世界将被更新。使用参数可以避免这种情况。

如果您使用参数,则无需担心’‘,因为参数是类型变量而不是字符串。

您也不需要将所有内容都转换为字符串,因为大多数.NET primitves具有SQL等效项。

请参阅此处以获取有关VB.Net SqlCommand.Parameters的示例和文档

https://msdn.microsoft.com/zh-
CN/library/system.data.sqlclient.sqlcommand.parameters%28v=vs.110%29.aspx

2021-05-16