1

私はC#のプログラミングが初めてです。オラクル dB を照会するスクリプトを作成しました。行数が 0 より大きい場合は、bat ファイルを実行するはずですが、そうでない場合は終了するはずです。

これまでに書いたコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider
using Oracle.DataAccess.Types;

namespace trigOra
{
    class Program
    {
        static void Main(string[] args)
        {
            string oradb = "Data Source=OMP1;User Id=user;Password=pwd;";

            OracleConnection conn = new OracleConnection(oradb); // C#

            conn.Open();

            OracleCommand cmd = new OracleCommand();
            cmd.Connection = conn;
            cmd.CommandText = "SELECT cast(Count(*) as varchar(20)) as trig FROM DMSN.DS3R_1XRTT_VOICE_TRIGGER";
            //cmd.CommandType = CommandType.Text;

            OracleDataReader dr = cmd.ExecuteReader();
            dr.Read();

            int cnt;
            if (int.TryParse(dr.GetString(0), out cnt))
            {
                if (cnt > 0)
                {
                    System.Diagnostics.Process.Start(@"C:\AutoBatch\backup\trigger.bat");
                    cmd.CommandText = "TRUNCATE TABLE DMSN.DS3R_1XRTT_VOICE_TRIGGER";
                    cmd.ExecuteNonQuery();
                }
            }
            conn.Dispose();

        }
    }
}

この部分を常に実行しているように見えることを除いて、コードは機能します。

if (cnt > 0)
{
    System.Diagnostics.Process.Start(@"C:\AutoBatch\backup\trigger.bat");
    cmd.CommandText = "TRUNCATE TABLE DMSN.DS3R_1XRTT_VOICE_TRIGGER";
    cmd.ExecuteNonQuery();

返される行数は 0 ですが、うーん...

4

1 に答える 1

1

Bat ファイルは、WaitForExit() 関数を使用して実行する必要があります。

int exitCode = RunProcessForExitCode(filename, arguments);

    private static int RunProcessForExitCode(string processFilename, string processArguments)
    {
        //make process output possible to machine-reading
        Process process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = processFilename,
                Arguments = processArguments,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                CreateNoWindow = true
            }
        };
        process.Start();
        Console.Write(process.StandardOutput.ReadToEnd());
        process.WaitForExit();
        return process.ExitCode;
    }
于 2013-04-20T11:28:18.390 に答える