"Compile with /main to specify the type that contains the entry point."
Asked Answered
S

4

16

Per the code below, I am getting the following message. I am fairly certain "why" I am getting it, I just don't know how to rearrange the code to move/remove/replace one of the error causing statements.

"Compile with /main to specify the type that contains the entry point."

There is a bunch of code in there under "static void Main(string[] args)", that I got from http://support.microsoft.com/kb/816112 forthe purpose of getting the ID from auto-increment, so i can have it auto increment, when the rest of the code populates the Access database. Any help is appreciated. And suggestions to get the results with easier code are welcome, as well!

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        OleDbConnection vcon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;data source=C:\Hazardous Materials\KinneyDatabase.accdb");

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            vcon.Open();

            try
            {
                StreamReader sr = new StreamReader(@"C:\Hazardous Materials\cities.txt");
                string line = sr.ReadLine();

                StreamReader sr2 = new StreamReader(@"C:\Hazardous Materials\drugs.txt");
                string line2 = sr2.ReadLine();

                StreamReader sr3 = new StreamReader(@"C:\Hazardous Materials\strengths.txt");
                string line3 = sr3.ReadLine();

                while (line != null)
                {
                    comboBox1.Items.Add(line);
                    line = sr.ReadLine();
                }
                while (line2 != null)
                {
                    comboBox2.Items.Add(line2);
                    line2 = sr2.ReadLine();
                }
                while (line3 != null)
                {
                    comboBox3.Items.Add(line3);
                    line3 = sr3.ReadLine();
                }
                textBox2.Text = "Date";
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }

        private static OleDbCommand cmdGetIdentity;

        [STAThread]
        static void Main(string[] args)
        {
            // Open Connection
            OleDbConnection vcon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;data source=C:\Hazardous Materials\KinneyDatabase.accdb");

            vcon.Open();

            // If the test table does not exist then create the Table
            string strSQL;
            strSQL = "CREATE TABLE AutoIncrementTest " +
                    "(ID int identity, Description varchar(40), " +
                    "CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))";

            // Command for Creating Table
            OleDbCommand cmdJetDB = new OleDbCommand(strSQL, vcon);
            cmdJetDB.ExecuteNonQuery();

            // Create a DataAdaptor With Insert Command For inserting records
            OleDbDataAdapter oleDa = new OleDbDataAdapter("Select * from AutoIncrementTest", vcon);


            // Command to Insert Records
            OleDbCommand cmdInsert = new OleDbCommand();
            cmdInsert.CommandText = "INSERT INTO AutoIncrementTest (Description) VALUES (?)";
            cmdInsert.Connection = vcon;
            cmdInsert.Parameters.Add(new OleDbParameter("Description", OleDbType.VarChar, 40, "Description"));
            oleDa.InsertCommand = cmdInsert;

            // Create a DataTable
            DataTable dtTest = new DataTable();
            oleDa.Fill(dtTest);

            DataRow drTest;

            // Add Rows to the Table
            drTest = dtTest.NewRow();
            drTest["Description"] = "This is a Test Row 1";
            dtTest.Rows.Add(drTest);

            drTest = dtTest.NewRow();
            drTest["Description"] = "This is a Test Row 2";
            dtTest.Rows.Add(drTest);

            // Create another Command to get IDENTITY Value
            cmdGetIdentity = new OleDbCommand();
            cmdGetIdentity.CommandText = "SELECT @@IDENTITY";
            cmdGetIdentity.Connection = vcon;

            // Delegate for Handling RowUpdated event
            oleDa.RowUpdated += new OleDbRowUpdatedEventHandler(HandleRowUpdated);

            // Update the Data
            oleDa.Update(dtTest);

            // Drop the table
            cmdJetDB.CommandText = "DROP TABLE AutoIncrementTest";
            cmdJetDB.ExecuteNonQuery();

            // Release the Resources
            cmdGetIdentity = null;
            cmdInsert = null;
            cmdJetDB = null;
            vcon.Close();
            vcon = null;
        }
        // Event Handler for RowUpdated Event
        private static void HandleRowUpdated(object sender, OleDbRowUpdatedEventArgs e)
        {
            if (e.Status == UpdateStatus.Continue && e.StatementType == StatementType.Insert )
            {
                // Get the Identity column value
                e.Row["ID"] = Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString());
                System.Diagnostics.Debug.WriteLine(e.Row["ID"]);
                e.Row.AcceptChanges();
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex <= 0)
            {
                MessageBox.Show("All fields must be filled out to submit the form");
            }
            else if (comboBox2.SelectedIndex <= 0)
            {
                MessageBox.Show("All fields must be filled out to submit the form");
            }
            string addRemove = "";
            //string toFrom = "";

            if (radioButton1.Checked)
            {
                addRemove = "add";
                //toFrom = "to";
            }
            else if (radioButton2.Checked)
            {
                addRemove = "remove";
                //toFrom = "from";
            }
            float mgTotal = (float.Parse(textBox1.Text) * float.Parse(comboBox3.Text));

            MessageBox.Show("You have entered the following information: \n\n"
                    + "\n" + "Location: " + float.Parse(comboBox1.Text)
                    + "\n" + "Medication: " + comboBox2.Text
                    + "\n" + "Quantity " + textBox2.Text
                    + "\n" + "Strength " + float.Parse(comboBox3.Text)
                    + "\n" + "Initials: " + textBox3.Text
                    + "\n" + "Add or Remove: " + addRemove
                    + "\n" + "Date: " + textBox2.Text);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            new Form2().Show();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Produced for use by HealthDirect© \n Scripted by Geoff Bertollini. March 2012");
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            comboBox3.SelectedIndex = comboBox2.SelectedIndex;
        }
        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            var date = DateTime.Now.ToString("MM/dd/yyyy");
            textBox2.Text = date;
        }

        private void label4_Click_1(object sender, EventArgs e)
        {

        }

        private void exitToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            string addRemove = "";
            string toFrom = "";

            if (radioButton1.Checked)
            {
                addRemove = "added";
                toFrom = "to";
            }
            else if (radioButton2.Checked)
            {
                addRemove = "removed";
                toFrom = "from";
            }

            float mgTotal = (float.Parse(textBox1.Text) * float.Parse(comboBox3.Text));

            string vsql = string.Format("insert into Log values " +
                    "('{0}','{1}',{2},{3},'{4}',#{5}#,'{6}','{7}')",
                    comboBox1.Text,
                    comboBox2.Text,
                    float.Parse(textBox1.Text),
                    float.Parse(comboBox3.Text),
                    textBox3.Text,
                    textBox2.Text,
                    addRemove,
                    "1"
                    );

            OleDbCommand vcom = new OleDbCommand(vsql, vcon);
            vcom.ExecuteNonQuery();
            MessageBox.Show("Date: " + textBox2.Text + "\n      Initials: " + textBox3.Text
                + "\n" + "You have " + addRemove + " " + mgTotal + " milligrams " + "\n"
                + "of " + comboBox2.Text + "\n" + toFrom + " the inventory of \n" + comboBox1.Text);

            vcom.Dispose();
        }
    }
}
Salonika answered 27/3, 2012 at 20:40 Comment(0)
C
4

If you are using Visual Studio to compile/debug your application you should set the entry point of your program in the properties of your project.
First Page -> Application
Startup object -> YourNameSpace.WindowsApplication1.Form1

There is no need to rearrange the code for this. However, looking at the code provided, I can't see any point in which you start the Form1. Inside the Main method is missing the code that starts Form1. Something like

Application.Run(new Form1());
Crepitate answered 27/3, 2012 at 20:48 Comment(0)
T
41

None of the answers get straight to the point.

The properties Dialog of the project, accessed by right-clicking the project, has an Application tab. On this tab there is a drop down list for 'Startup Object' -- just select the correct class file that Visual Studio should target. As long as there is a Main static void event in that class file, it will target it. Be sure Main is capitalized. This won't work:

static void main(string[] args) { ... code ... }

Here is an image:

enter image description here

In a web project you can right click on an ASPX file and set it as the startup page, very similar thing. Why Visual Studio buries this setting doesn't make sense but this is how you do it.

Transition answered 14/1, 2016 at 15:44 Comment(0)
C
4

If you are using Visual Studio to compile/debug your application you should set the entry point of your program in the properties of your project.
First Page -> Application
Startup object -> YourNameSpace.WindowsApplication1.Form1

There is no need to rearrange the code for this. However, looking at the code provided, I can't see any point in which you start the Form1. Inside the Main method is missing the code that starts Form1. Something like

Application.Run(new Form1());
Crepitate answered 27/3, 2012 at 20:48 Comment(0)
E
3

The compiler is complaining that it cannot find the type that implements the application entry point (i.e. the Main method), possibly because you have more than one type in your assembly with a compatible Main method.

One way to resolve this would be to use the /main option, as in /main:Form1. Of course, if the problem is that more than one Main method exists then the better solution would be to simply remove the ones that you do not intend to use.

Ebbie answered 27/3, 2012 at 20:45 Comment(4)
As mentioned . . . "I am fairly certain "why" I am getting it. I just don't know how to rearrange the code to move/remove/replace one of the error causing statements."Salonika
@Geo: Does the second paragraph not answer that?Ebbie
Can you show me an example of how you would do what you are suggesting? I have only been programming as a self-taught in C# for about 2 and a half weeks, and I could use a pick-me-up! I saw something about what you are suggesting, on a web-site, and I have to be honest, I was slightly confused. But with examples I am picking this up super quick! A hint on the syntax you are suggesting? That is, if I'm not being to pushy. :-)Salonika
I would remove one of them, if I knew where to place all of the other stuff, so it still does what I have already gotten it to do, without taking a step backward. This program will write comboboxes and textboxes to an Access database. So far so good. But when I added an auto-incrementing field to the table, it wouldn't update itself. That's why I added the "static void Main(string[] args)" section. But when I added the suggested code from the Microsoft website (link provided above), I had to remove some stuff. (duplicate program data). Help me Obi Wan Kenobi. You're my only hope! LOLSalonika
R
0

I had to do this manually for my implementation of Lox in C#. To "compile with /main" from the command line, I used

csc /main:Lox.AstPrinter AstPrinter.cs Expr.cs Token.cs TokenType.cs

or, more generally, if you want to compile class Foo in the Acme namespace, that also depends on files A.cs, B.cs, and C.cs:

csc /main:Acme.Foo A.cs B.cs C.cs Foo.cs
Rasping answered 15/8, 2019 at 18:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.