【问题标题】:Inserting into database an sql statement将sql语句插入数据库
【发布时间】:2013-12-26 06:57:14
【问题描述】:

我正在尝试向数据库中插入一条 sql 语句,因为其中一个变量包含一条 sql 语句。然而,该语句有参数,它在数据库中显示为 @parm 而不是实际值。有什么想法吗?

这是声明:

    Dim cmd As New SqlCommand("insert into MyTableOne (ID, QueryText) values         (3,'insert into MyTableTwo (Name,Image,ClientId,Taskcode,TaskYear,Notes,ImgDT,Flag) values   (@name,@img,@clientid,@taskcode,@taskyear,@notes,@imgdt,@flag)')", con)

这就是我填写值的方式 cmd.Parameters.AddWithValue("@name",Name) 和 Name 是在方法中作为参数给出的值 (这一切都在一个 Web 服务方法中,然后从提供值的应用程序中调用)

新:

   Dim cmd As New SqlCommand("insert into FTWebUploadQueue2_GVT (ID, QueryText) values (4,'insert into IMAGES_GVT (Name,Image,ClientId,Taskcode,TaskYear,Notes,ImgDT,Flag) values ('+ @name + ',' + @img + ',' + @clientid + ',' + @taskcode + ',' + @taskyear + ',' + @notes + ',' + @imgdt + ',' + @flag +')')", con)

    <WebMethod()> _
        Public Function SaveImageInBackoffice(ByVal imageData As Byte(), ByVal Name As String, ByVal ClientId As String, ByVal Taskcode As Integer, ByVal TaskYear As Integer, ByVal Notes As String, ByVal ImgDT As DateTime, ByVal Flag As Integer) As Boolean

    Dim con As New SqlConnection("Server=****;uid=**;pwd=****;database=ImagesTrial")
    If con.State = ConnectionState.Closed Then con.Open()

    Dim cmd As New SqlCommand("insert into FTWebUploadQueue3_GVT (ID, QueryText) values (4,'insert into IMAGES_GVT (Name,Image,ClientId,Taskcode,TaskYear,Notes,ImgDT,Flag) values ('+ CAST(@name AS VARCHAR) + ',' + CAST(@img AS VARCHAR) + ',' + CAST(@clientid AS VARCHAR) + ',' + CAST(@taskcode AS VARCHAR) + ',' + CAST(@taskyear AS VARCHAR) + ',' + CAST(@notes AS VARCHAR) + ',' + CAST(@imgdt AS VARCHAR) + ',' + CAST(@flag AS VARCHAR) +')')", con)

    cmd.Parameters.AddWithValue("@img", imageData)
    cmd.Parameters.AddWithValue("@name", Name)
    cmd.Parameters.AddWithValue("@clientid", ClientId)
    cmd.Parameters.AddWithValue("@taskcode", Taskcode)
    cmd.Parameters.AddWithValue("@taskyear", TaskYear)
    cmd.Parameters.AddWithValue("@notes", Notes)
    cmd.Parameters.AddWithValue("@imgdt", ImgDT)
    cmd.Parameters.AddWithValue("@flag", Flag)
    cmd.ExecuteNonQuery()
    con.Close()
    Return 0
End Function

【问题讨论】:

  • 所有@___参数都在单引号内,所以它是一个字符串。
  • 我尝试在所有@parms 周围加上单引号,我发现服务器无法处理请求。我其实不太明白你的意思
  • 您提供的是文字字符串:'...@name,@img...' 不是参数,它们是文本。
  • 知道如何将它们作为参数提供吗?
  • 是的,您必须确保参数在单引号之外 - 这意味着您可能必须连接语句。一种方式:'... values (' + @name + ',' + @img + [and so on...]'

标签: mysql sql vb.net insert sql-insert


【解决方案1】:
    <WebMethod()> _
        Public Function SaveImageInBackoffice(ByVal imageData As Byte(), ByVal Name As String, ByVal ClientId As String, ByVal Taskcode As Integer, ByVal TaskYear As Integer, ByVal Notes As String, ByVal ImgDT As DateTime, ByVal Flag As Integer) As Boolean

    Dim con As New SqlConnection("Server=****;uid=**;pwd=****;database=ImagesTrial")
    If con.State = ConnectionState.Closed Then con.Open()

    Dim qry As New SqlCommand("insert into IMAGES_GVT (Name,Image,ClientId,Taskcode,TaskYear,Notes,ImgDT,Flag) values (@name,@img,@clientid,@taskcode,@taskyear,@notes,@imgdt,@flag", con)

    qry.Parameters.AddWithValue("@img", imageData)
    qry.Parameters.AddWithValue("@name", Name)
    qry.Parameters.AddWithValue("@clientid", ClientId)
    qry.Parameters.AddWithValue("@taskcode", Taskcode)
    qry.Parameters.AddWithValue("@taskyear", TaskYear)
    qry.Parameters.AddWithValue("@notes", Notes)
    qry.Parameters.AddWithValue("@imgdt", ImgDT)
    qry.Parameters.AddWithValue("@flag", Flag)
    Dim query as String = qry.CommandText

    Dim cmd As New SqlCommand("insert into FTWebUploadQueue3_GVT (ID, QueryText) values (4,@query", con)
    cmd.Parameters.AddWithValue("@query", query)
    cmd.ExecuteNonQuery()
    con.Close()
    Return 0
End Function

这让 SqlClient 库可以处理参数。您可以获得准备好的语句/命令文本,执行,然后将其作为参数值传递给您要执行的实际命令。

【讨论】:

  • 再次感谢您.. 这个输出实际上是查询字符串中带有@parms 的查询。尽管我想使用这种方法来获取查询文本: query = cmd.CommandText Dim p As SqlParameter For Each p In cmd.Parameters query = query.Replace(p.ParameterName, p.Value) Next
  • 这给出了正确的所有值,但是字节数组和日期的值是错误的。有什么想法吗?
  • 它们前后的值是多少?
  • 这是我在数据库中得到的:插入 IMAGES_GVT (Name,Image,ClientId,Taskcode,TaskYear,Notes,ImgDT,Flag) 值 (farah1,System.Byte[],1,1 ,2013,hi,System.Byte[]dt,0)
  • 我怀疑查询实际上会起作用,但显然不是文本表示。您可能确实需要在传入这两个值之前对其进行转换。例如:qry.Parameters.AddWithValue("@imgdt", ImgDT.ToString()) 'Assuming ImgDT is of a datetime type
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 2023-03-17
  • 2011-06-01
  • 1970-01-01
相关资源
最近更新 更多