用c#或任何其他简单方法创建每小时运行的自动sql脚本
我有一个简单的sql脚本:用c#或任何其他简单方法创建每小时运行的自动sql脚本,sql,c#-3.0,Sql,C# 3.0,我有一个简单的sql脚本: Select * from student where score > 60 我正在尝试做的是每1小时运行一次上述脚本,并在我的计算机上以任何可能的方式得到通知,即满足上述条件。所以基本上我不想在上面的语句中每小时按F5,看看是否有结果。我希望这里的某个人有一些东西可以做到这一点,如果你有,请分享代码。你可以使用Sql代理创建作业,Sql server 2008还具有邮件功能 打开SQL Management Studio并连接到SQL Server 展开SQ
Select * from student where score > 60
我正在尝试做的是每1小时运行一次上述脚本,并在我的计算机上以任何可能的方式得到通知,即满足上述条件。所以基本上我不想在上面的语句中每小时按F5,看看是否有结果。我希望这里的某个人有一些东西可以做到这一点,如果你有,请分享代码。你可以使用Sql代理创建作业,Sql server 2008还具有邮件功能 打开SQL Management Studio并连接到SQL Server 展开SQL Server代理节点(如果看不到它,请使用SQL configuration manager或检查服务,并确保
SQL Server代理(SQLINSTANCENAME)
已启动)
右键单击作业并选择“新建作业”
可以在作业中运行SQL语句。我将让您了解该部分的其余部分(非常直观)
您可能希望使用xp\u sendmail
查看xp\u sendmail
您可能需要打开该功能(默认情况下为关闭),并且需要一些服务器/计算机来传递邮件(因此,如果在本地计算机上,则可能需要安装IIS和SMTP)
编辑:
假设您无法访问服务器,并且希望在客户端执行此操作,则可以创建.NET framework应用程序或windows服务,使用时间表或计时器方法为您执行此工作:
时间表方法:
创建一个简单的命令行应用程序,执行查询并发送结果,并使用windows调度程序每小时调用一次(或任何时间间隔)
计时器方法:
创建一个简单的应用程序或windows服务,它将运行一个计时器线程,该线程每x分钟运行一次
我可能会选择前者。代码非常简单-新的控制台应用程序:
static void Main(string args[])
{
// No arguments needed so just do the work
using(SqlConnection conn = new SqlConnection("ConnectionString"))
{
using(SqlCommand cmd = new SqlCommand("sql query text", conn))
{
var dr = cmd.ExecuteReader();
List<myClass> results = new List<myClass>();
// Read the rows
while(dr.Read())
{
var someValue = dr.GetString(dr.GetOrdinal("ColumnName"));
// etc
// stuff these values into myClass and add to the list
results.Add(new myClass(someValue));
}
}
}
if(results.Count > 0) // Send mail
{
//Send the message.
SmtpClient client = new SmtpClient(server);
// Add credentials if the SMTP server requires them.
client.Credentials = CredentialCache.DefaultNetworkCredentials;
MailMessage message = new MailMessage(
"recipient@test.com",
"sender@test.com",
"Subject",
"Body");
// Obviously you'd have to read the rows from your list, maybe override ToString() on
// myClass and call that using a StringBuilder to build the email body and append the rows
// This may throw exceptions - maybe some error handling (in any of this code) is advisable
client.Send(message);
}
}
static void Main(字符串参数[])
{
//不需要任何论据,所以只需要做这项工作
使用(SqlConnection conn=newsqlconnection(“ConnectionString”))
{
使用(SqlCommand cmd=newsqlcommand(“sql查询文本”,conn))
{
var dr=cmd.ExecuteReader();
列表结果=新列表();
//读这些行
while(dr.Read())
{
var someValue=dr.GetString(dr.GetOrdinal(“ColumnName”);
//等
//将这些值填充到myClass中并添加到列表中
结果:添加(新myClass(someValue));
}
}
}
如果(results.Count>0)//发送邮件
{
//发送消息。
SmtpClient=新的SmtpClient(服务器);
//如果SMTP服务器需要凭据,请添加凭据。
client.Credentials=CredentialCache.DefaultNetworkCredentials;
MailMessage=新的MailMessage(
"recipient@test.com",
"sender@test.com",
“主题”,
“主体”);
//显然,您必须读取列表中的行,可能需要覆盖上的ToString()
//myClass并使用StringBuilder调用它来构建电子邮件正文并附加行
//这可能会引发异常-可能一些错误处理(在任何代码中)是可取的
客户端。发送(消息);
}
}
免责声明:可能这些都不会编译:D
编辑2:我会这样做,因为它比windows服务更容易调试,因为您可以从命令行运行它。您还可以传递命令行参数,这样就不需要应用程序配置文件您使用的是什么版本的SQL?MSSQL或MySql还是什么?你试过cron或类似的东西(Windows任务调度器)吗?如果以编程方式保持这种方式,可能会对您有所帮助。您可以使用MSSQL中的Sql代理来运行作业。MySql提供了事件:-阅读文档,了解dbExpress、标准、开发人员或企业(我的假设是express)的可用内容。你应该有Sql代理服务-你安装了management studio吗?@Charleh Its enterprise,是的,我安装了management studio。我认为这不会起作用,因为我在Sql server上没有管理员权限。它是托管Sql server还是在你的公司等?它托管在第三方我没有访问服务器代理的权限。我正在考虑制作一个简单的c#应用程序,每小时运行一次查询。你知道该怎么做吗?如果你想在客户端运行一个应用程序并查询远程数据,你可以编写一个简单的应用程序,查询数据一次,然后按照windows时间表运行。或者创建一个windows服务,并让它运行一个计时器线程,该线程将时不时地执行该工作。我可以用一些建议更新我的答案——你对c#完全熟悉吗?