我需要编写一个批处理文件,该文件在一天中的特定时间自动运行,我从论坛得到了很多解决方案,但是在我的情况下,我需要编写SQL查询这是非常复杂的我说明我的c#代码我需要运行,我需要在SQL查询
我的C#代码看起来像:
public void mark_absent()
{
int userid = 0, Last_rec = Last_Record();
bool isapproved;
cmd = new SqlCommand("select top(1) UserID,IsApproved from tblUser ", conn);
conn.Open();
dr = cmd.ExecuteReader();
if (dr.Read())
{
userid = Convert.ToInt32(dr["UserID"].ToString());
isapproved = Convert.ToBoolean(dr["IsApproved"].ToString());
dr.Close();
conn.Close();
}
else
{
dr.Close();
conn.Close();
}
for (int i = userid; i <= Last_rec; i++)
{
cmd = new SqlCommand("select UserID,IsApproved from tblUser where UserID='" + userid + "' and IsApproved='True'", conn);
conn.Open();
dr = cmd.ExecuteReader();
if (dr.Read())
{
dr.Close();
conn.Close();
cmd = new SqlCommand("select UserID,AtnDate from tblAttend where convert(date,AtnDate)='" + DateTime.Now.Date + "' and UserID='" + userid + "'", conn);
conn.Open();
dr = cmd.ExecuteReader();
if (dr.Read())
{
conn.Close();
dr.Close();
//count++;
}
else
{
dr.Close();
conn.Close();
cmd = new SqlCommand("insert into tblAttend (AtnDate,CheckIn,ChkOut,Status,Workhrs,ExtraHrs,UserID,CrtUpDate) values ('" + DateTime.Now + "','00:00:00','00:00:00','Absent','00:00:00','-09:00:00','" + userid + "','" + DateTime.Now + "')", conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
else
{
conn.Close();
dr.Close();
}
userid = userid + 1;
}
}
在批处理文件中,我发现只选择或删除或插入命令,但这里我需要sqldatareader以及循环
那么如何在SQL查询中编写这个c#代码呢?如果我错了什么是最好的解决方案,那么人们会建议我......?
感谢您的帮助。
答案 0 :(得分:1)
最简单的解决方案,因为您已经有了C#代码,就是创建一个控制台应用程序,并使用Main()方法中的现有代码。
将其编译为EXE,并将EXE放在必须运行代码的计算机上的某个位置。
使用Windows任务计划程序安排EXE根据需要运行。
确保添加日志记录,以便跟踪程序在无人参与的情况下运行时发生的任何错误。 NLog是一个很好的起点。
答案 1 :(得分:0)
如果您需要在每天的特定时间运行应用程序,并且您使用的是Microsoft操作系统,请查看Windows任务计划程序。您可以设置计划和操作。行动将是执行你的程序。
答案 2 :(得分:0)
bacth中的例子:
sqlcmd -Q "EXEC dbo.your_sp" -S server -d db -o C:\output.txt