为什么我得到字符串或二进制数据会被截断?作为一个错误
本文关键字:错误 一个 字符串 二进制 数据 为什么 | 更新日期: 2023-09-27 17:49:24
我有一个问题:
字符串或二进制数据将被截断
这是我的编码:
String savePath = @"C:'Users'Shen'Desktop'LenzOCR'LenzOCR'WindowsFormsApplication1'ImageFile'" + fileName;
inputImageBox.Image = Image.FromFile(ImageLocation);
inputImageBox.Image.Save(savePath);
String sqlData = "INSERT INTO CharacterOCR(ImageName, ImagePath, Character, CharacterDescription)
VALUES('"+fileName+"', '"+savePath+"', '"+typeName+"', '"+CharDesc+"')";
SqlCommand cmd = new SqlCommand(sqlData, con);
cmd.ExecuteNonQuery(); // <<<<<error indicates here
有什么问题吗?
查看表的模式并查看最大长度。您可能正在尝试插入大于最大长度的内容
这只是意味着您试图填充到列中的某个值对于您为该列定义的数据类型来说太长了。
例如,尝试INSERT
"Hello"到一个只有VARCHAR(4)
的列。
通常认为更好的编码实践是存储图像在数据库中所在位置的路径,同时将图像存储在适当的目录结构中。
如果你设置了将图像数据插入数据库,请告诉每个人你的数据库是什么版本。
编辑:调出ImagePath
列的SQL Schema,并告诉我您定义了多少字符来接受。
接下来,在执行SQL之前,调用Console.WriteLine(savePath.Length)
。
savePath.Length
是否大于ImagePath
列定义?
当列长度与表定义和storedprocedure参数不同时,您将得到此错误。例子:
我有一张桌子叫Employee
列Reason
并且在声明表时,Reason
的列长度为varchar(100)
,当为Employee
表编写存储过程时,我将Reason
参数声明为@Reason varchar(250)
。
在这种情况下,您将得到这个错误。所以要确保列长度是唯一的