参数 5:无法从 'System.Drawing.Image' 转换为 'string' - 从主类调用 class1
Posted
技术标签:
【中文标题】参数 5:无法从 \'System.Drawing.Image\' 转换为 \'string\' - 从主类调用 class1【英文标题】:Argument 5: cannot convert from 'System.Drawing.Image' to 'string' - calling class1 from Main Class参数 5:无法从 'System.Drawing.Image' 转换为 'string' - 从主类调用 class1 【发布时间】:2013-04-28 19:49:40 【问题描述】:我正在处理我以前的线程here。我收到这个错误。我不知道如何解决这个问题。我正在尝试在 Main 类中调用 class1.cs。如果有人可以在这里帮助我,将不胜感激。提前谢谢...
这是class1.cs
public static OleDbConnection GetConnection()
var myCon = new OleDbConnection();
myCon.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\...Database1.mdb";
return myCon;
public static void Insert(string id, string agegroup, string gender, string photoa)
var con = GetConnection();
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO Table1 (ID, AgeGroup, Gender, photo )";
cmd.Parameters.AddWithValue("@ID", id);
cmd.Parameters.AddWithValue("@AgeGroup", agegroup);
cmd.Parameters.AddWithValue("@Gender", gender);
cmd.Parameters.AddWithValue("@photo", photoa);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
这是我想调用它的主类。
private void btnInsert_Click(object sender, EventArgs e)
Class1.Insert(textBox1.Text, comboBox1.Text, comboBox2.Text, pictureBox1.Image); // error is pointing at picture1.Image
if (pictureBox1.Image != null)
//using MemoryStream:
ms = new MemoryStream();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
byte[] photo_aray = new byte[ms.Length];
ms.Position = 0;
ms.Read(photo_aray, 0, photo_aray.Length);
cmd.Parameters.AddWithValue("@photo", photo_aray);
【问题讨论】:
【参考方案1】:问题是您发送图像但您的方法接受字符串类型
public static void Insert(string id, string agegroup, string gender, System.Drawing.Image photoa)
// code
cmd.Parameters.AddWithValue("@photo", imageToByteArray(photoa));
// code
public static byte[] imageToByteArray(System.Drawing.Image iImage)
MemoryStream mMemoryStream = new MemoryStream();
iImage.Save(mMemoryStream, System.Drawing.Imaging.ImageFormat.Png);
return mMemoryStream.ToArray();
【讨论】:
感谢您的快速响应。我在这里陷入困境。 Jon Skeet 已经接受了现实检查并就插入功能提出了建议。然后我应该问一下错误... 非静态字段、方法或属性 'WFATest1.Class1.imageToByteArray(System.Drawing.Image) 需要对象引用 @bucketblast - 为了从您的 Insert 方法调用 imageToByteArray,它必须是静态的。【参考方案2】:是的 - 你的最后一个参数是这样声明的:
string photoa
...但是您使用picture1.Image
的参数调用它,这不是字符串。您要在数据库中存储什么文本?或者,如果您尝试存储图像数据本身,为什么要声明string
类型的参数?
我们可以告诉您出了什么问题,但您需要自己确定要如何解决它,因为我们不知道您的要求。您可能想要将图像写入流,并将二进制数据存储在数据库中。或者您可能只是想在数据库中存储一个文件名。
顺便说一句,鉴于这个问题和您的最后一个问题,我强烈建议您退后一步,从基础开始学习 C#,而不是深入研究 GUI 和数据库。如果您对一开始的语言有非常牢固的掌握,以后处理更复杂的事情会容易得多。我建议您从使用框架的核心元素(集合、文件 IO 等)的基于控制台的应用程序开始。尝试语言的各个方面(以及一般的面向对象),例如继承、重载等。然后当您对这些构建块,您将处于更好的位置,可以在更具挑战性的情况下工作。不幸的是,有些书从数据库和用户界面开始将初学者抛入了深渊:(
【讨论】:
我想存储图片。我想也许我需要使用字节而不是字符串,但这不起作用。我将在顶部编辑我的主题以向您展示我的意思 @bucketblast:当Insert
调用返回时,插入已经发生,cmd
超出范围。正如我所说,我强烈建议您退后一步 - 在没有真正了解发生了什么的情况下随意尝试对您没有帮助。
我明白你的意思。我可以在 Main 类中使用这些功能,我只想知道其他类是如何完成的。但感谢您的建议。我正在看java数据结构和算法的书,希望能帮到我
@bucketblast:这里的问题不是数据结构和算法,而是 C#。
@bucketblast:我的意思是,这两个问题基本上都表明您目前有点超出您的深度,并且会从回归基础中受益。以上是关于参数 5:无法从 'System.Drawing.Image' 转换为 'string' - 从主类调用 class1的主要内容,如果未能解决你的问题,请参考以下文章
无法从 'System.Drawing.Bitmap' 转换为 'byte[*,*,*]'
从 VB 转换为 C#:bitmap.save() 参数错误
使用 System.Drawing.Font.FromHfont(IntPtr hfont) 从 SYSTEM_FONT Stock 对象创建 System.Drawing.Font
从 System.Drawing.Bitmap 加载 WPF BitmapImage