Sql server 2005 不允许从数据类型varchar隐式转换为varbinary(max)。使用CONVERT函数运行此查询
这是表单中“我的保存”按钮中的代码。我正在使用VB6.0和MSSQL Server 2005 CommonDialog1&2保存插入图片框的图像的文件名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
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&“)”)
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