问题
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();
}
}
}
回答1:
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:
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.
回答2:
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());
回答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.
回答4:
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
来源:https://stackoverflow.com/questions/9897371/compile-with-main-to-specify-the-type-that-contains-the-entry-point