Camillia
asked on
which VS2010 template?
I want to create an executable that sends emails every night. I cant use the web templates.
From windows templates, which templates should I use? Console app?? windows service??
From windows templates, which templates should I use? Console app?? windows service??
ASKER
thanks, this is sql 2000 unfortuantely. I'll use windows service template. thanks.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
eric, so I should use which template? I looked at your link but not clear.. This app is a small app. Reads 5 rows of data and emails it to some managers, every night at 9 PM.
I prefer to build a "Windows Forms application"
ASKER
oh and then i can schedule the windows form? does that link show it how to??
I schedule some of these applications passing an argument like /batch so the job starts, does its job, and quits automatically.
ASKER
I implemented this in C#. How do I call it in "batch" mode. I went to "properties", "debug" and typed "/batch". I step thru the code and the enum "enuEnvironment" comes out as unknown and the form pops up.
I also tried "/bath//ENV_DEV" but still comes out as unknown and the form interface pops up.
I also tried "/bath//ENV_DEV" but still comes out as unknown and the form interface pops up.
check http://msdn.microsoft.com/en-us/library/cb20e19t(v=vs.80).aspx to find out how to handle C# command line arguments
ASKER
I tried "/BATCH"..upper case. Now else if (GlobalArguments.BatchMode ) comes out as false.
can you show your code?
ASKER
yes, i just tried your VB.Net code with /BATCH and that worked. This is my C# code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WallboardEmail
{
public static class ModMain
{
public static GlobalArgumentsStructure GlobalArguments = new GlobalArgumentsStructure();
public static void Main(string[] pArgs) //pass argument from command line by using the parameter
{
GetCommandLineArgs(pArgs);
StartApplication();
}
#region methods
private static void StartApplication()
{
if (GlobalArguments.DisplayArgs)
{
//do something here
Application.Exit();
}
else if (GlobalArguments.BatchMode)
{
//Launch a process that has no UI
//send email //same cProcess in orig code
Log.LogTrace("This line was added by a batch process. Email Sent");
}
else
{
//Launch the UI
Form1 form = new Form1();
Application.Run(form);
}
}
private static void GetCommandLineArgs(string[] pArgs)
{
//If no arguments are passed to the application, short-circuit the process
if ((pArgs.Length == 0))
{
GlobalArguments.DisplayArgs = true;
}
//Ensure all arguments are in upper case
for (Int32 intI = 0; intI <= pArgs.Length - 1; intI++)
{
pArgs[intI] = pArgs[intI].ToUpper();
}
//Search for expected arguments (all others being ignored)
var _with1 = GlobalArguments;
_with1.DisplayArgs = (Array.IndexOf(pArgs, "/?") >= 0);
_with1.BatchMode = (Array.IndexOf(pArgs, "/BATCH") >= 0);
if (Array.IndexOf(pArgs, "/ENV_DEV") >= 0)
{
_with1.Environment = GlobalArgumentsStructure.enuEnvironment.Dev;
}
else if (Array.IndexOf(pArgs, "/ENV_PRODUCTION") >= 0)
{
_with1.Environment = GlobalArgumentsStructure.enuEnvironment.Production;
}
else
{
_with1.Environment = GlobalArgumentsStructure.enuEnvironment.Dev;
}
}
#endregion
#region enum
public struct GlobalArgumentsStructure
{
public enum enuEnvironment
{
Unknown = 0,
Dev = 1,
Production = 3
}
public bool BatchMode;
public enuEnvironment Environment;
public bool DisplayArgs;
}
#endregion
}
}
is your Main method ever called?
ASKER
yes, i step thru it.
Calls GetCommandLineArgs., this line is true:
_with1.BatchMode = (Array.IndexOf(pArgs, "/BATCH") >= 0);
Then calls StartApplication and
1. if (GlobalArguments.DisplayAr gs) is false
2. This also is false but in your VB code, it's trueelse if (GlobalArguments.BatchMode ) //comes out as false
Calls GetCommandLineArgs., this line is true:
_with1.BatchMode = (Array.IndexOf(pArgs, "/BATCH") >= 0);
Then calls StartApplication and
1. if (GlobalArguments.DisplayAr
2. This also is false but in your VB code, it's trueelse if (GlobalArguments.BatchMode
ASKER
it's not because of this line, is it?
public static GlobalArgumentsStructure GlobalArguments = new GlobalArgumentsStructure() ;
i dont think so but not sure why GlobalArguments.BatchMode becomes false in "StartApplication" routine...
public static GlobalArgumentsStructure GlobalArguments = new GlobalArgumentsStructure()
i dont think so but not sure why GlobalArguments.BatchMode becomes false in "StartApplication" routine...
ASKER
Fixed it. I added this line of code:
_with1.BatchMode = (Array.IndexOf(pArgs, "/BATCH") >= 0);
GlobalArguments.BatchMode = (Array.IndexOf(pArgs, "/BATCH") >= 0);
GlobalArguments.BatchMode wasnt set. Not sure how your VB code works. You dont have that line of code and still works. But at least, this gets me going.
_with1.BatchMode = (Array.IndexOf(pArgs, "/BATCH") >= 0);
GlobalArguments.BatchMode = (Array.IndexOf(pArgs, "/BATCH") >= 0);
GlobalArguments.BatchMode wasnt set. Not sure how your VB code works. You dont have that line of code and still works. But at least, this gets me going.
if you want to send email using some data from sql server, it's good to add job to send emails. check this link to setup database mail on sql server 2005
http://www.databasejournal.com/features/mssql/article.php/3626056/Database-Mail-in-SQL-Server-2005.htm