不允许从数据类型 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) 的隐式转换