Insert 是一个变量,但用作方法 - 从主类调用 class1 [关闭]

Posted

技术标签:

【中文标题】Insert 是一个变量,但用作方法 - 从主类调用 class1 [关闭]【英文标题】:Insert is a variable but is used like a method - calling class1 from Main Class [closed] 【发布时间】:2013-04-28 19:20:49 【问题描述】:

我不知道我在这里做错了什么。我试图在主类、SQL 命令参数中调用 class1.cs,但出现错误。我正在使用我以前的线程here 如果有人可以在这里帮助我,我将不胜感激,在此先感谢..

class.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 crimoff, string photoa, string cv)
    

        var con = GetConnection();
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "INSERT INTO Table1 (ID, AgeGroup, Gender, CriminalOffence, photo, CV )";
        cmd.Parameters.AddWithValue("@ID", id);
        cmd.Parameters.AddWithValue("@AgeGroup", agegroup);
        cmd.Parameters.AddWithValue("@Gender", gender);
        cmd.Parameters.AddWithValue("@CriminalOffence", crimoff);
        cmd.Parameters.AddWithValue("@photo", photoa);
        cmd.Parameters.AddWithValue("@CV", cv);
        cmd.Connection = con;
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    

出现错误的主窗体类...

 private void btnInsert_Click(object sender, EventArgs e)
    

        Class1 Insert = new Class1();
        Insert(textBox1.Text, comboBox1.Text, comboBox2.Text, rBYes.Text, rBNo.Text, // error pointing at Insert line
        pictureBox1.Image, richTextBox1.Text);

        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);
        

【问题讨论】:

试试Class1.Insert(therest...这是一个静态方法。 @MartinMulder - Damith 解决方案有效,但 pictureBox1.Image 出现错误...Argument 5: cannot convert from 'System.Drawing.Image' to 'string'? 【参考方案1】:

你不需要创建对象来调用静态方法。如果该方法在同一个命名空间上,您可以调用如下直接方法。

Insert(textBox1.Text, comboBox1.Text, comboBox2.Text, rBYes.Text, rBNo.Text, 
        pictureBox1.Image, richTextBox1.Text);

但是把你创建的对象的名字改成Insert

Class1 Insert = new Class1(); // remove this line

如果你的方法Insert写在Class1里面,那么你可以如下调用它

Class1.Insert(textBox1.Text, comboBox1.Text, comboBox2.Text, rBYes.Text, rBNo.Text, 
        pictureBox1.Image, richTextBox1.Text);

【讨论】:

感谢 Damith,解决了这个问题。我收到 pictureBox1.Image 错误...参数 5:无法从 'System.Drawing.Image' 转换为 'string'。我要创建另一个线程吗? 是的,创建新问题。 如果它解决了您的问题,请接受答案。 谢谢达米特。你的解决方案奏效了。【参考方案2】:

这是因为您在尝试调用 Insert 函数之前立即创建了一个名为 Insert 的变量。编译器正在查看变量并尝试将其用作函数 - 在这种情况下无法完成。

您实际上不需要创建 Class1 的实例 - 正如其他发帖人所说 - 因为 Insert 函数是静态的。

【讨论】:

【参考方案3】: 您的插入方法是静态方法。我觉得你应该把那个类名放在它前面。 您的插入方法有 6 个参数,但您尝试输入 7 个参数。 您的参数并非都是字符串类型。一种是 Image 类型。

【讨论】:

以上是关于Insert 是一个变量,但用作方法 - 从主类调用 class1 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将JFrame类用作主类?

参数 5:无法从 'System.Drawing.Image' 转换为 'string' - 从主类调用 class1

从云函数触发数据流管道时,无法从主类执行超过 1 个函数

如何强制 AutoClosable 警告传播到 Java 中的类调用者?

如何从主(winsock)向服务器发送消息?

由于无法加载主类错误而无法运行 JAR 文件