2

我正在从我以前的线程这里工作。我收到这个错误。我不知道如何解决这个问题。我正在尝试在 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);
        }
4

2 回答 2

3

问题是您发送图像但您的方法接受字符串类型

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();  
}  
于 2013-04-28T19:51:56.833 回答
0

是的 - 你的最后一个参数是这样声明的:

string photoa

...但是您使用的参数调用它picture1.Image,它不是字符串。您要在数据库中存储什么文本?或者,如果您尝试存储图像数据本身,为什么要声明类型参数string

我们可以告诉您出了什么问题,但您需要自己弄清楚您想如何解决它,因为我们不知道您的要求。您可能希望将图像写入流,并将二进制数据存储在数据库中。或者,也许您只想在数据库中存储一个文件名。

顺便说一句,鉴于这个问题和您的最后一个问题,我强烈建议您退后一步,从基础开始学习 C#,而不是深入研究 GUI 和数据库。如果您对一开始的语言有非常牢固的掌握,以后处理更复杂的事情会容易得多。我建议您从使用框架的核心元素(集合、文件 IO 等)的基于控制台的应用程序开始。尝试语言的各个方面(以及一般的面向对象),例如继承、重载等。然后当您对这些构建块,您将处于更好的位置,可以在更具挑战性的情况下工作。不幸的是,有些书从数据库和 UI开始,将初学者抛入了深渊:(

于 2013-04-28T19:51:34.373 回答