【问题标题】:translate my code to a batch file for me [closed]为我将我的代码翻译成批处理文件[关闭]
【发布时间】:2015-10-14 02:26:05
【问题描述】:

我需要编写一个在一天中的特定时间自动运行的批处理文件,并且我从论坛中获得了许多运行良好的解决方案,但在我的情况下,我需要编写相当复杂的 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# 代码。如果我错了,你们会建议我什么是最好的解决方案......?

感谢您的帮助。

【问题讨论】:

  • 这个问题不清楚。您是在问如何在 C# 中运行 SQL,如何从批处理文件执行程序,如何安排批处理文件或程序定期执行?
  • 要简单地安排一些事情,请使用 Windows 任务计划程序。
  • 无需创建与上述代码类似的过程......
  • 嗯,这根本不是你问题的主题,我有没有提到你的问题不清楚?
  • 我投票结束这个问题,因为 StackOverflow 不是“为我做我的工作”服务

标签: c# sql .net sql-server


【解决方案1】:

如果您需要在每天的特定时间运行应用程序,并且您使用的是 Microsoft 操作系统,请查看 Windows 任务计划程序。您可以设置时间表和操作。该操作将执行您的程序。

【讨论】:

  • 我需要将我的代码转换成 SQL 过程。
  • 您能否更新您的帖子标题以反映这一点?不清楚您是否正在寻求有关将代码转换为存储过程的帮助。
【解决方案2】:

最简单的解决方案是创建一个控制台应用程序,并在 Main() 方法中使用现有的代码,因为您已经有了工作的 C# 代码。

将其编译成 EXE,并将 EXE 放在计算机上必须运行代码的某个位置。

使用 Windows 任务计划程序来安排您的 EXE 根据需要运行。

确保您添加了日志记录,这样您就可以跟踪程序在无人看管的情况下运行时发生的任何错误。 NLog 是一个很好的起点。

【讨论】:

  • 这是我已有的想法,但我需要专家的意见和建议,所以在我的控制台应用程序中,我需要提供该特定数据库的连接......我在写吗?
  • 通常您会将实际的连接字符串放在 app.config 的 Connection Strings 部分,然后从配置文件将其加载到您的 EXE 中。
【解决方案3】:

查看sqlcmd.exe

后面的例子:

sqlcmd -Q "EXEC dbo.your_sp" -S server -d db -o C:\output.txt

Create a Stored Procedure

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多