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("执行成功");
}
}
}

原文地址:https://www.cnblogs.com/Cxpeng/p/11438027.html

时间: 2024-10-12 21:54:41

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

Python脚本之django---mysql-记录主机性能数据到数据库-web站点管理数据库及web显示命令执行结果

##############################################################环境 [[email protected] python]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.4 (Santiago) You have new mail in /var/spool/mail/root [[email protected] python]# python -

reportviewer在web端手写代码导出excel文件

private void Page_Load(object sender, System.EventArgs e) { this.rdlViewer.ProcessingMode = ProcessingMode.Local; this.rdlViewer.LocalReport.ReportPath = @"d:\Group+Process+by+Steps+(+Open+)+report.rdl"; } protected void Button1_Click(object sen

php 操作 mysql 实现批量执行mysql语句 mysql文件

1 <?php 2 /** 3 * 批量运行sql文件 4 * 正则分隔是重点 preg_split("/;[\r\n]+/", filecontent) 5 */ 6 $config = require '../dataconfig.php'; 7 $dbhost = $config['DB_HOST']; 8 $dbname = $config['DB_USER']; 9 $dbpass = $config['DB_PWD']; 10 $db_database = $conf

怎样从C#中打开数据库并进行 增 删 改 查 操作

首先 在C#中引用数据库的操作! (因为我们用的是SQLserver数据库,所以是SqlClient) using System.Data.SqlClient; 1:要实现对数据库的操作,我们必须先登录数据库 Console.WriteLine("请输入用户名:"); //提示客户输入用户名和密码 string name = Console.ReadLine(); Console.WriteLine("请输入密码:"); string pwd = Console.R

web端代码提示

web端代码提示 这个功能是基本完成了,但是与需求不一致.但是废弃挺可惜的,所以就单独拿出来作为一个例子记录一下. 其中还包括了,java代码的自动编译和执行,在web端显示执行结果. 下载链接: https://download.csdn.net/download/jixu8/10580091 原文地址:https://www.cnblogs.com/jixu8/p/9408974.html

【Mybatis】MyBatis对表执行CRUD操作(三)

本例在[Mybatis]MyBatis配置文件的使用(二)基础上继续学习对表执行CRUD操作 使用MyBatis对表执行CRUD操作 1.定义sql映射xml文件(EmployeeMapper.xml) 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "htt

构建施耐德楼控系统数据库后台服务器示例工程三(Web端展示)

最近看到Extjs的示例中有仿操作系统桌面的代码,并且展示效果很美观,结合楼控这个系统的Web端展示需求,目前前端采用Extjs.楼控相关的操作会设计成桌面中的不同应用. Extjs初次入手看起来很复杂,但是由于其自带的示例代码很丰富,通常在了解一些基本概念后,参照着示例代码一步一步去做,我认为是最好的学习方式了. 目前我参照着Extjs中仿照桌面的示例代码,做出了如下的画面: 从图中我们可以看出,我目前在仿照着这个示例代码中的GridPanel.TabPanel.Window这些基本的组件,做

新手入门:史上最全Web端即时通讯技术原理详解

前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM(相关文章请参见:<IM架构篇>.<IM综合资料>.<IM/推送的通信格式.协议篇>.<IM心跳保活篇>.<IM安全篇>.<实时音视频开发>).消息推送应用(参见:<推送技术好文>)的通信原理介绍也较多

Web端权限管理新增实用功能:批量增加操作,简单方便快速!

扩展了吉日嘎拉的Web端权限管理功能后,每次添加菜单倒没啥问题,毕竟菜单的数量有限,可是每增加一个模块.功能或者说权限控制点,就得针对各种常规操作,新增很多遍. 浪费时间,还容易出错.新增了一个字典表ItemsActionCategory,将常用的操作都记录到这个表,然后新增一个批量增加的功能,一键增加几十个操作控制. 保存后的效果如下,这里的规则:模块.操作,中间用.号连接. 一切从实用出发,减少重复劳动,节省时间,多出来的时间可以去多赚钱+多陪家人.