Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用c#或任何其他简单方法创建每小时运行的自动sql脚本_Sql_C# 3.0 - Fatal编程技术网

用c#或任何其他简单方法创建每小时运行的自动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

我有一个简单的sql脚本:

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#完全熟悉吗?