C#小白使用入门,数据库操作,web端文件下载,执行外部程序,操作ini文件

现况:现有程序被排在服务器的每日执行任务计划中,程序功能是下载web端的一个文件,然后塞入到数据库中。

问题:不知道什么原因,偶尔发现服务器任务执行失败情况,导致某一天的数据缺失。

需求:每隔三天检查一次数据是否存在,如果不存在,则指定日期重新下载一次。

 

第一步:写一个操作数据库的类

namespace DEMO2616
{
public class OracleDBlink
{
string connStr = "User Id=LIRUPENG;Password=Lrp19961013..;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.4)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORCL)))";                      //连接字符串
OracleConnection dblink;
public OracleDBlink()                                    //构造方法,new即调用
{
try
{
  dblink = new OracleConnection(connStr);  //先new一个OracleConnection 把连接字符串传过去。
  dblink.Open();              //调用方法.连接
}
catch (OracleException ex)           //异常处理
{
  dblink.Close();
  throw new Exception(ex.Message);       
}
finally
{
  if (dblink.State != ConnectionState.open)
  {
    dblink.Close();
  }
}
}
public DataSet Query(string sql)        // 查询操作 ,传入sql字符串
{
  DataSet datatable = new DataSet();     //先new一个dataset放数据
  OracleDataAdapter data = new OracleDataAdapter(sql,dblink); //new一个DataAdapter 按照sql语法把数据从数据库中提取出来。
  data.Fill(datatable);          //把提取出来的数据放到datatable中
  return datatable;            //返回提取出来的数据
}
public int curd(string sql)          //delete insert update create 操作  同样传入SQL字符串
{
  OracleCommand curd = new OracleCommand(sql);           
  int i = curd.ExecuteNonQuery();
  return i;                //返回影响的行数 -1代表失败
}
public bool Exists(string sql,OracleParameter[] op)           //判断数据是否存在
{
OracleCommand exists = new OracleCommand(sql,dblink);
object obj= exists.ExecuteScalar();      //返回一个对象。第一条数据的第一列
if ((object.Equals(obj, null)) || (object.Equals(obj, System.DBNull.Value)))
{
  return false;
}
else
  return true;
}
}
}

 

第二步:检查数据是否存在,然后再进行下载,或者再执行原本程序。

namespace DEMO2616
{
public partial class download : Form
{
  public download()
{
  InitializeComponent();
}


[DllImport("kernel32")]             //操作ini文件一定要先声明这一段
public static extern void WritePrivateProfileString(string sectionName, string key, string value, string filePath);

OracleDBlink SQLquery = new OracleDBlink();    //先new数据库连接类。
DataSet table = new DataSet();        //承接查询出来的数据。
string sql;                   //SQL语句
private void button1_Click(object sender, EventArgs e)
{
string date=DateTime.Now.ToString("yyyyMMdd");
string pos = "WHRKZFB20000002";
string urlpath;
string savepath;
string filelayout;
string inipath= System.Environment.CurrentDirectory;   //获取当前路径


  //OracleParameter[] oparam = {new OracleParameter("date", OracleDbType.Varchar2),
                   //new OracleParameter("pos", OracleDbType.Varchar2)};    //Oracle SQL语句参数。
  //oparam[0].Value = date;
  //oparam[1].Value = pos;


for (int i = 1; i <=3; i++)
{
  date = DateTime.Now.AddDays(-i).ToString("yyyyMMdd");
  sql = "select * FROM whrk.yy_bank_detail where BANKLIQUIDATIONDATE='" +date+"'and BANKMERCHANTNO='"+pos+"'";
  if (SQLquery.Exists(sql,oparam))    // 判断数据是否存在(true)
  {
    return;
  }
  else
  {
  date = date.Substring(1, 4) + "-" + date.Substring(4, 6) + "-" + date.Substring(6, 8);
  inipath = inipath + @"D:\WorkSpace\刘普20190725日更新支付宝支付\whrk_Download\download.ini";
  SetValue("WIN", "is_dateno","1", inipath); //改ini文件
  SetValue("WIN", "is_date", date, inipath);
  //System.Diagnostics.Process.Start(@"D:\WorkSpace\刘普20190725日更新支付宝支付\whrk_download.exe");//执行程序
  SetValue("WIN", "is_dateno", "0", inipath);
  //下载流水文件
  for (int k = 1; k < 3; k++)
     {
       if (k == 1) filelayout = "_1.txt";
      else filelayout = "_68.xls";
      urlpath = @"ftp://uisftp.chinaums.com/build/10210002730000_" + date + filelayout;
      savepath = @"G:\WorkSpace\学习文档\" + date + filelayout;
      downloadfile("10210002730000", "Ab123456", urlpath, savepath); //账户,密码,目标路径,本地路径。
      }

  }

}

public void downloadfile(string userName,string password,string url,string savepath) //下载url 中文件;//参数分别为:账户,密码,目标路径,本地路径。
{
  WebClient webclient = new WebClient();
  webclient.Encoding = Encoding.UTF8;
  webclient.Credentials = new NetworkCredential(userName, password);
  webclient.DownloadFile(url,savepath);
}
public static bool SetValue(string sectionName, string key, string value, string filePath) //操作INI配置文件
{
  WritePrivateProfileString(sectionName, key, value, filePath);
  return true;
}

private void button3_Click(object sender, EventArgs e)                 //执行外部程序测试。
{
  System.Diagnostics.Process.Start(@"C:\QQmusic\QQMusic.exe");
  MessageBox.Show("执行成功");
}
}
}

上一篇:DBLINK 创建


下一篇:Oracle-dblink使用不当