Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Sql server 2005 不允许从数据类型varchar隐式转换为varbinary(max)。使用CONVERT函数运行此查询_Sql Server 2005_Vb6 - Fatal编程技术网

Sql server 2005 不允许从数据类型varchar隐式转换为varbinary(max)。使用CONVERT函数运行此查询

Sql server 2005 不允许从数据类型varchar隐式转换为varbinary(max)。使用CONVERT函数运行此查询,sql-server-2005,vb6,Sql Server 2005,Vb6,这是表单中“我的保存”按钮中的代码。我正在使用VB6.0和MSSQL Server 2005 CommonDialog1&2保存插入图片框的图像的文件名 Set rs=con.Execute(“插入到表1中 值(“&txtbox1.Text&“,”\u &“'”&txtbox2.Text&“,”\u &“'”&CommonDialog1.FileName&“,” &“'”&CommonDialog2.FileName&“,” &“'”&txtbox3.Text&“)”) 不允许从数据类型var

这是表单中“我的保存”按钮中的代码。我正在使用VB6.0和MSSQL Server 2005

CommonDialog1&2保存插入图片框的图像的文件名

Set rs=con.Execute(“插入到表1中
值(“&txtbox1.Text&“,”\u
&“'”&txtbox2.Text&“,”\u
&“'”&CommonDialog1.FileName&“,”
&“'”&CommonDialog2.FileName&“,”
&“'”&txtbox3.Text&“)”)
不允许从数据类型varchar隐式转换为varbinary(max)。请使用CONVERT函数运行此查询。“-运行时会弹出错误。

因为SQL的“INSERT”函数不接受子查询,我尝试使用CAST转换CommonDialog1&2的文件名,结果成功

设置rs=con.Execute(“插入表1 值(“”&txtbox1.Text&“,”\uxT
&“'”&txtbox2.Text&“,”\ &“cast('”&CommonDialog1.FileName&“'as varbinary(max)),”\ &“强制转换(“&CommonDialog2.FileName&”为varbinary(max)),“
&“'”&txtbox3.Text&“)”)

  • 使用下面列出的参数创建一个存储过程(可以不用,但我更喜欢这种方法)(我建议重命名它们)
  • 用存储过程名称替换mCmd.CommandText行
  • 更换连接字符串
  • 如果任何文本大小错误,请更正参数大小

  • Hellooo SQL注入。即使使用经典的VB和ADO,您仍然可以使用允许使用参数化查询的。祝贺您。您已将文件名存储在
    varbinary(max)
    列中。但是考虑到列的定义,我希望它是为了存储文件的实际内容而创建的。谢谢@Damien_the_unsiever,但是还有其他方法来存储文件的实际内容吗?e、 g.将图像直接存储到数据库中。我正在使用这段代码获取图像的文件名:“CommonDialog1.showopen”picturebox1。谢谢@SpectralGhost,我会试试这个。
    Dim mConn As New ADODB.Connection
    Dim mCmd As New ADODB.Command
    Dim mStreamCD1 As New ADODB.Stream
    Dim mStreamCD2 As New ADODB.Stream
    
    mStreamCD1.Type = adTypeBinary
    mStreamCD1.Open
    mStreamCD1.LoadFromFile (CommonDialog1.FileName)
    
    mStreamCD2.Type = adTypeBinary
    mStreamCD2.Open
    mStreamCD2.LoadFromFile (CommonDialog2.FileName)
    
    mConn.Open "Insert your Connection String"
    Set mCmd.ActiveConnection = mConn
    mCmd.CommandType = adCmdText
    
    mCmd.CommandText = "InsertIntoTable1"
    mCmd.Parameters.Append mCmd.CreateParameter("@txtbox1Text", adVarChar, adParamInput, 250, txtbox1.Text)
    mCmd.Parameters.Append mCmd.CreateParameter("@txtbox2Text", adVarChar, adParamInput, 250, txtbox2.Text)
    mCmd.Parameters.Append mCmd.CreateParameter("@CD1", adVarBinary, adParamInput, mStreamCD1.Size, mStreamCD1.Read)
    mCmd.Parameters.Append mCmd.CreateParameter("@CD2", adVarBinary, adParamInput, mStreamCD2.Size, mStreamCD2.Read)
    mCmd.Parameters.Append mCmd.CreateParameter("@txtbox3Text", adVarChar, adParamInput, 250, txtbox3.Text)
    
    mCmd.Execute , , adExecuteNoRecords