不允许从数据类型 nvarchar 到 varbinary(max) 的隐式转换

Posted

技术标签:

【中文标题】不允许从数据类型 nvarchar 到 varbinary(max) 的隐式转换【英文标题】:Implicit conversion from data type nvarchar to varbinary(max) is not allowed 【发布时间】:2011-09-06 19:21:55 【问题描述】:

我从下面的代码中收到以下错误:

。使用 CONVERT 函数运行此查询。

 protected void btnOKImageUpload_Click(object sender, EventArgs e)
 
     try
    
        string filePath = "";
        string fileName = "";

        int UserId = Convert.ToInt32(hdnUserId.Value);
        if (fileImage.HasFile)
        
            if (CheckFileType(fileImage.FileName))
            
                filePath = Server.MapPath(Application["UploadFolder"].ToString());
                if (UserId > -1)
                
                    fileName = "Image_" + UserId.ToString() + Path.GetExtension(fileImage.FileName);
                
                else
                
                    fileName = Path.GetFileName(fileImage.FileName);
                
                string virFileName = Application["UploadFolder"].ToString() + "/" + fileName;
                string tmpFileName = Path.Combine(filePath, fileName);
                fileImage.SaveAs(tmpFileName);
                SessionData.LocationFloorPlanFile = tmpFileName;

                DataAccess.SaveEmployeeImage(UserId, fileName);

                hdnImageFileName.Value = fileName;
                txtImageUpload.Text = virFileName;
                //btnFloorPlanView.HRef = hdnFloorPlan.Value;
                btnImageUpload.Disabled = true;
                btnImageDelete.Enabled = true;
                hdnPostbackAction.Value = "UPLOAD";
            
        
   
     catch (Exception ex)
     
         hdnErrMsg.Value = ex.Message;
         //"An error has occurred while processing your request. Please contact support for further assistance.";
       
                                                                 
public static void SaveEmployeeImage(int userId, string imageFilePath)

    ArrayList paramaters = getParamArray();
    paramaters.Add(getParam("@userId", DbType.Int32, userId));
    paramaters.Add(getParam("@imageFilePath", DbType.AnsiString, imageFilePath));

    executeNonQuery("xp_SaveEmployeeImage", paramaters);

我的程序将用户 ID 和图像插入到表中。

我需要更改什么数据类型?

【问题讨论】:

你的存储过程是什么样的? 您似乎正在向数据库发送一个字符串值,您确定它不应该是一个字节数组吗? 我看到你在使用ArrayList,感觉很脏。 @Matthew - 啊,祝福,让我想起了我们的新学员,刚从大学毕业,他正在用 .net 4 编写并且仍在使用 ArrayList;我本来想说点什么,但想通了——他得了第一个,所以希望他最终能想通! @Andras 小步骤....小步骤... 【参考方案1】:

嗯,您将该图像作为 AnsiString 数据类型传递,这就是问题所在。

我认为您需要 DbType.Binary。

但是,您的参数名称是 imageFilePath,所以大概您实际上应该将文件路径作为字符串提供给它?这可能意味着您的 xp 实际上是错误的。

【讨论】:

是的,我正在使用文件名的字符串 我们确实需要您正在使用的扩展过程的代码。我的猜测是您需要将图像复制到 sql server 可用的本地或网络路径,然后将该路径传递给 proc。

以上是关于不允许从数据类型 nvarchar 到 varbinary(max) 的隐式转换的主要内容,如果未能解决你的问题,请参考以下文章

Spring JDBC for SQL Server - 使用 SQLXML 数据类型产生 SQLServerException:不允许从数据类型 xml 到 nvarchar(max) 的隐式转换

无法在 varbinary(max) 中插入空值并出现错误:不允许从数据类型 nvarchar 到 varbinary(max) 的隐式转换

MSSQL数据类型nvarchar如何强行转为float类型.

SQL里,如何将数据类型nvarchar转换成float?

nvarchar 值转换为数据类型为 int 发生语法错误

mysql等效数据类型