我还是c#的新人请帮助我。我试图在数据库中保存图像,因为我按照我的研究中的建议做了这个:
byte[] img = ImageToByte(pbxBarcode.Image);
byte[] img2 = ImageToByte(pbxLogo.Image);
cmd.CommandText = "Update table set Image=(?),logo=(?) where ID=" + id + "";
cmd.Parameters.Add("@barcode", OdbcType.Image).Value = img;
cmd.Parameters.Add("@logo", OdbcType.Image).Value = img2;
cmd.ExecuteNonQuery();
输入的第一个数据将按预期保存,但程序会冻结(?)。有了它,我的意思是没有EventHandler会触发,但是对象仍然有效,文本框仍然接受输入等等。然后,如果我浏览表单然后返回,则错误出现在Program.cs中,说“参数无效”。我提供了截图。
还要注意,如果我只提供了一个odbcParameter ..所有如果工作正常..我也尝试使用两个Update语句..甚至为每个创建了两个函数,updatebarcode(id),updatelogo(id)但仍然没有运气。我希望你能帮助我。 TNX
答案 0 :(得分:0)
如果使用sql server,则可以使用SqlCommand。 Here是一个带有示例的文档。从文档: SQL Server的Microsoft .NET Framework数据提供程序不支持问号(?)占位符,用于将参数传递给SQL语句或由CommandType.Text命令调用的存储过程 < / p>
那么您可能想要使用的是:
cmd.CommandText = "Update table set Image=(@barcode),logo=(@logo) where ID=@imageID";
cmd.Parameters.Add("@barcode", SqlDbType.Image).Value = img;
cmd.Parameters.Add("@logo", SqlDbType.Image).Value = img2;
cmd.Parameters.Add("@imageID", SqlDbType.Int).Value = id;
还有其他人提到你在Program.cs中遇到异常,因为你没有在其他地方处理异常。
如果您这样做:
try
{
cmd.ExecuteNonQuery();
}
catch(Exception exc) //<==
{
}
Visual Studio将在箭头显示的位置中断。此时您可以分析exc
,您将看到错误消息和堆栈跟踪(Jon Skeet正在谈论的事情)
答案 1 :(得分:0)
我知道了......我认为在按钮点击事件中发现了错误。不确定原因:
pbxLogo.Image.Dispose(); //here..
pbxLogo.Image = pbxSelectLogo.Image;
但我删除了该行,它只是起作用了......呵呵
这是例外:
System.ArgumentException: Parameter is not valid.
at System.Drawing.Image.get_FrameDimensionsList()
at System.Drawing.ImageAnimator.CanAnimate(Image image)
at System.Drawing.ImageAnimator.ImageInfo..ctor(Image image)
at System.Drawing.ImageAnimator.Animate(Image image, EventHandler onFrameChangedHandler)
at System.Windows.Forms.PictureBox.Animate(Boolean animate)
at System.Windows.Forms.PictureBox.Animate()
at System.Windows.Forms.PictureBox.InstallNewImage(Image value, ImageInstallationType installationType)
at System.Windows.Forms.PictureBox.set_Image(Image value)
at xxxxx.BarcodeGenerator.btnStOk_Click(Object sender, EventArgs e) in C:\xxxxx\xxxxx\BarcodeGenerator.cs:line 459
这是什么意思?