C#脚本在不应运行时运行execute行';T
我是C语言编程新手。我编写了一个查询oracle数据库的脚本,如果rowcount大于0,它应该运行一个bat文件,如果不是,它应该结束 以下是我到目前为止编写的代码:C#脚本在不应运行时运行execute行';T,c#,plsql,C#,Plsql,我是C语言编程新手。我编写了一个查询oracle数据库的脚本,如果rowcount大于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
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();
即使返回的rowcount为0。hmmmm…您的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;
}
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;
}
为什么需要将
转换为varchar
?您可以使用dr.GetInt32/64()
代替。此外,您似乎需要使用Process.Start(…).WaitForExit()
,否则您将在备份完成之前运行truncate。请尝试初始化int cnt=0;然后看我会怀疑你的计数比0@DanilaPolevshikov我得到一个返回值0为什么需要将转换为varchar
?您可以使用dr.GetInt32/64()
代替。此外,您似乎需要使用Process.Start(…).WaitForExit()
,否则您将在备份完成之前运行truncate。请尝试初始化int cnt=0;然后看我会怀疑你的计数比0@DanilaPolevshikov我得到了一个0的值