Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过VB.NET插入数据_Vb.net_Syntax Error - Fatal编程技术网

如何通过VB.NET插入数据

如何通过VB.NET插入数据,vb.net,syntax-error,Vb.net,Syntax Error,我试图使用VB.NET将我的查询字符串传递到数据库中,但我看到一个语法错误。我不知道它在哪里,请帮帮我 Me.str = String.Concat(New String() {"Insert into Sales values('", Me.txtVoucherNo.Text, "','", dtpDate.Value, "','", dtpMonth.Value, "','", POSPage.txtPatientNo.Text, "','",

我试图使用VB.NET将我的查询字符串传递到数据库中,但我看到一个语法错误。我不知道它在哪里,请帮帮我

Me.str = String.Concat(New String() 
    {"Insert into Sales values('", 
        Me.txtVoucherNo.Text, "','", dtpDate.Value, "','", 
        dtpMonth.Value, "','", POSPage.txtPatientNo.Text, "','", 
        POSPage.txtPatientName.Text, "','", 
        POSPage.txtAddress.Text, ",'--',", POSPage.txtsubtotal.Text, "','", 
        POSPage.txtTax.Text, ",'--',", POSPage.txtdiscount.Text, "','", 
        POSPage.txtGrandTotal.Text, "')"})
不! 这样的字符串编辑使您容易受到sql注入攻击。这简直是乞求被黑客攻击

你想要更像这样的东西:

使用cn作为新的SqlConnection(“此处为连接字符串”)_
cmd作为新的SqlCommand(
“插入销售值(@voucheno、@Date、@Month、@PatientNo、@PatientName、@Address、'-'、@小计、@Tax、'-'、@折扣、@GrandTotal)”
,中国)
'将此更改为使用数据库中的实际列类型和长度
cmd.Parameters.Add(“@voucheno”,SqlDbType.NVarChar,10)。Value=Me.txtvoucheno.Text
cmd.Parameters.Add(“@Date”,SqlDbType.DateTime).Value=dtpDate.Value
cmd.Parameters.Add(“@Month”,SqlDbType.DateTime).Value=dtpMonth.Value
cmd.Parameters.Add(“@PatientNo”,SqlDbType.NVarChar,10)。Value=POSPage.txtPatientNo.Text
cmd.Parameters.Add(“@PatientName”,SqlDbType.NVarChar,50)。Value=POSPage.txtPatientName.Text
cmd.Parameters.Add(“@Address”,SqlDbType.NVarChar,250)。Value=POSPage.txtdaddress.Text
cmd.Parameters.Add(“@SubTotal”,SqlDbType.Decimal).Value=Convert.ToDecimal(POSPage.txtssubtotal.Text)
cmd.Parameters.Add(“@Tax”,SqlDbType.Decimal).Value=Convert.ToDecimal(POSPage.txtTax.Text)
cmd.Parameters.Add(“@Discount”,SqlDbType.Decimal).Value=Convert.ToDecimal(POSPage.txtdiscount.Text)
cmd.Parameters.Add(“@GrandTotal”,SqlDbType.Decimal).Value=Convert.ToDecimal(POSPage.txtgrandtottal.Text)
cn.Open()
cmd.ExecuteNonQuery()
终端使用
注意,在这段代码中,SQL字符串本身是常量。您需要的不是类中的字符串字段(
Me.Str
),而是完整的SqlCommand对象,这样您就可以同时保存sql语句和参数数据

如果仍有问题,请尝试在
VALUES()
子句之前包含列的名称

另外,原始语法错误是由字符串数组中的以下序列引起的:

 "','", POSPage.txtAddress.Text, ",'--',"
请注意,这将在查询中打开一个带引号的字段,但在逗号之后才关闭它。接下来是Sql Server中的注释标记。简而言之,如果您实际输入字段名称作为地址,您将得到以下结果:

'POSPage.txtAddress.Text,'--
两个连字符后面的所有内容都将被注释掉,包括VALUES子句的右括号,这意味着查询不是有效的SQL语法。。。假设有人还没有在另一个字段上使用sql注入来包含他们想要的任何sql语句作为查询的一部分


我不会告诉你如何修复这个错误,因为它现在应该是显而易见的,而且。。。又出现了令人讨厌的注射问题。我要说的是,在查询的后面部分,您对另一个
“,”--“,“
字符串犯了同样的错误。

1)您不应该将字符串串联起来以生成SQL语句。请仔细阅读SQL注入。。。。。。。。。。2) 你不说错误是什么;请提供错误消息。您应该使用参数化查询,而不是字符串连接。正如@SpectralGhost指出的,除了不安全之外,它还可能是语法错误的原因。打印出
Me.str
并告诉我们里面有什么,这样我们就可以确定了。@rbaryyoung我不知道他是否有SQL语法问题,或者他发布的代码行有什么问题。。。。可能是SQL字符串的格式不正确(尤其是-和前面连接的字符串)。错误为“语法错误靠近',”@SpectralGhost事实上,我假设SQL字符串由于注入文本转义不当而格式错误,这就是导致他在SQL中出现语法错误的原因。当然,即使注入正确转义,也可能格式错误,这就是为什么我们需要实际的字符串文本。