• 仿ISQL功能的实现,可以实现批处理功能


    具体请见下载文件:/Files/bigmouthz/DNet写的数据库isql执行程序(含源码).rar
    部分代码如下:
      
    DBCore.DataBaseVisitor.AbsDBHelper dbhelper = null ;

      private void bt_DBLink_Click(object sender, System.EventArgs e)
      {
       try
       {
        this.GetDBConfig(xml);
        this.GetControlValue();
        dbhelper = GetDBHelper();
        System.Windows.Forms.MessageBox.Show("数据库连接正常!");
        this.rtb_State.Text += "数据库连接正常! :_)\r\n";
       }
       catch
       {
        System.Windows.Forms.MessageBox.Show("数据库连接失败!");
        this.rtb_State.Text += "数据库连接失败! :_(\r\n";
       }
      }

      private void bt_LoadDBConfig_Click(object sender, System.EventArgs e)
      {
       this.GetDBConfig(xml);
       this.SetControlValue();
       this.rtb_State.Text += "数据库配置载入完成! :_)\r\n";
      }

      private void bt_SaveDBConfig_Click(object sender, System.EventArgs e)
      {
       this.GetControlValue();
       this.SetDBConfig(xml);
       this.rtb_State.Text += "文件已经保存完成! :_)\r\n";
      }

      private void bt_TestDBLink_Click(object sender, System.EventArgs e)
      {
       try
       {
        this.GetDBConfig(xml);
        this.GetControlValue();
        DBCore.DataBaseVisitor.AbsDBHelper dbhelper = GetDBHelper();
        object o = dbhelper.ExecuteScalar(TestSql);
        this.rtb_State.Text = "测试时间:" + System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")+ "\r\n";
        this.rtb_State.Text +=  o == null ? "None Data!":o.ToString();
        this.rtb_State.Text += "执行完成! :_)\r\n";
        this.rtb_sql.Text = TestSql;
        System.Windows.Forms.MessageBox.Show("测试通过!数据库连接正常!");
       }
       catch
       {
        System.Windows.Forms.MessageBox.Show("数据库连接测试失败!");
        this.rtb_State.Text += "数据库连接测试失败! :_)\r\n";
       }
      }

      private void bt_load_Click(object sender, System.EventArgs e)
      {
       System.Windows.Forms.OpenFileDialog OFD;
       OFD = new System.Windows.Forms.OpenFileDialog();
       if(OFD.ShowDialog() == DialogResult.OK)
       {
        System.IO.StreamReader sr = new System.IO.StreamReader(OFD.FileName,System.Text.Encoding.GetEncoding("gb2312"));
        this.rtb_sql.Text = sr.ReadToEnd();
        sr.Close();
        this.rtb_State.Text += "载入文件完成! :_)\r\n";
       }
      }

      private void batch_Exec()
      {
       string split = "\n";
       string tmp = this.rtb_sql.Text;

       int ibit = 0;
       int itmp = 0;
       while (ibit >= 0)
       {
        ibit = tmp.IndexOf(split,itmp);
        if (ibit - itmp < 0) break;
        string line = tmp.Substring(itmp, ibit - itmp);
        itmp = ibit + 1;
        if (line == null || line == "")  continue;
        auto_Exec(line);
       }
      }

      private void auto_Exec(string filepath)
      {
       try
       {
        System.IO.StreamReader sr = new System.IO.StreamReader(filepath,System.Text.Encoding.GetEncoding("gb2312"));
        this.rtb_sql.Text = sr.ReadToEnd();
        sr.Close();
        this.rtb_State.Text += "自动载入文件完成! :_)\r\n";
        Singe_Exec();
       }
       catch
       {
        this.rtb_sql.Text = "";
        this.rtb_State.Text += "自动载入文件失败! :_(\r\n";
       }
      }

      private void Singe_Exec()
      {
       if (dbhelper == null)
       {
        try
        {
         this.GetDBConfig(xml);
         this.GetControlValue();
         dbhelper = GetDBHelper();
         this.rtb_State.Text += "数据库连接成功! :_)\r\n";
        }
        catch
        {
         System.Windows.Forms.MessageBox.Show("数据库连接失败!");
         this.rtb_State.Text += "数据库连接失败! :_(\r\n";
        }
       }

       try
       {
        string sql = this.rtb_sql.Text;
        sql = sql.Replace("\n"," ").Replace("\r"," ").Replace("\t"," ");
        if (this.cb_resulttype.Checked)
        {
         System.Data.DataSet ds = dbhelper.ExecuteDataset(sql);
         this.dg_display.DataSource = ds;
         this.dg_display.Expand(-1); 
         this.rtb_State.Text += "执行时间:" + System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")+ "\r\n";
         this.rtb_State.Text += "执行完成! :_)\r\n";
        }
        else
        {
         int o = dbhelper.ExecuteNonQuery(sql);
         this.dg_display.DataSource = null;
         this.rtb_State.Text += "执行时间:" + System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")+ "\r\n";
         this.rtb_State.Text += "执行影响行数:" + o.ToString() +"\r\n";
         this.rtb_State.Text += "执行完成! :_)\r\n";
        }
       }
       catch
       {
        System.Windows.Forms.MessageBox.Show("执行语句失败!:-(");
        this.rtb_State.Text += "执行语句失败! :_(\r\n";
       }
      }

      private void bt_Exec_Click(object sender, System.EventArgs e)
      {
       if (this.cb_ExecType.Checked)
       {
        batch_Exec();
       }
       else
       {
        Singe_Exec();
       }
      }

      #region Control_DBConfigVar
      private void SetControlValue()
      {
       this.cb_dblink.Text = this.DBConnection;
       this.tb_UserID.Text = this.UserID;
       this.tb_PassWord.Text = this.Password;
       this.tb_DBAddress.Text = this.DataSource;
       this.tb_DBName.Text = this.InitialCatalog;
      }

      private void GetControlValue()
      {
       this.DBConnection = this.cb_dblink.Text;
       this.UserID = this.tb_UserID.Text;
       this.Password = this.tb_PassWord.Text;
       this.DataSource = this.tb_DBAddress.Text;
       this.InitialCatalog = this.tb_DBName.Text;
      }
      #endregion

      #region DBConfig

      private string xml = System.Environment.CurrentDirectory + "/DBC.dll";
      private string Sql="user id=$0$;password=$1$;data source=$2$;initial catalog=$3$;persist security info=False";//Sql专用引擎连接串
      private string OleDb="Provider=sqloledb;Data Source=$2$;Initial Catalog=$3$;User Id=$0$;Password=$1$;";//OleDb引擎连接串
      private string Odbc="Driver={SQL Server};Server=$2$;Database=$3$;Uid=$0$;Pwd=$1$;";//Odbc引擎连接串

            private string DBConnection;//选择连接的方式 Sql|Odbc|OleDb
      private string UserID;//数据库用户ID 在升级数据库中要求使用SA用户
      private string Password;//数据库连接口令
      private string DataSource;//数据库服务器的地址或者数据库服务器名称
      private string InitialCatalog;//指定要访问的数据库名称

      private string TestSql = "select * from dtproperties";//测试Sql

      private void SetDBConfig(string xml)
      {
       /* *
     <?xml version="1.0" encoding="gb2312"?>
    <DBConfig>
      <DataBase>
        <!--这个区域禁止修改Begin-->
        <Sql>user id=$0$;password=$1$;data source=$2$;initial catalog=$3$;persist security info=False</Sql>
        <Odbc>Driver={SQL Server};Server=$2$;Database=$3$;Uid=$0$;Pwd=$1$;</Odbc>
        <OleDb>Provider=sqloledb;Data Source=$2$;Initial Catalog=$3$;User Id=$0$;Password=$1$;</OleDb>
        <!--这个区域禁止修改End-->
        
        <DBConnection>Sql</DBConnection> <!--选择连接的方式 Sql|Odbc|OleDb -->
        <UserID>Sa</UserID> <!--数据库用户ID 在升级数据库中要求使用SA用户-->
        <Password>jsl</Password>     <!--数据库连接口令-->
        <DataSource>10.200.1.251</DataSource> <!--数据库服务器的地址或者数据库服务器名称-->
        <InitialCatalog>Qinghai</InitialCatalog><!--指定要访问的数据库名称-->
      </DataBase>
    </DBConfig>
    <!--FrameWork DBConfig.XML-->
        * */
       XmlTextWriter writer = new XmlTextWriter(xml,System.Text.Encoding.UTF8);
       writer.Formatting = System.Xml.Formatting.Indented;
       writer.IndentChar = '\t';
       writer.WriteStartDocument();
       writer.WriteComment("DataBase Config." + System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
       writer.WriteStartElement("DBConfig");
       writer.WriteStartElement("DataBase");
       writer.WriteComment("这个区域禁止修改Begin");
       writer.WriteElementString("Sql","user id=$0$;password=$1$;data source=$2$;initial catalog=$3$;persist security info=False");
       writer.WriteElementString("OleDb","Provider=sqloledb;Data Source=$2$;Initial Catalog=$3$;User Id=$0$;Password=$1$;");
       writer.WriteElementString("Odbc","Driver={SQL Server};Server=$2$;Database=$3$;Uid=$0$;Pwd=$1$;");
       writer.WriteComment("这个区域禁止修改End");
       writer.WriteElementString("DBConnection",DBConnection);
       writer.WriteComment("选择连接的方式 Sql|Odbc|OleDb");
       writer.WriteElementString("UserID",UserID);
       writer.WriteComment("数据库用户ID 在升级数据库中要求使用SA用户");
       writer.WriteElementString("Password",Password);
       writer.WriteComment("数据库连接口令");
       writer.WriteElementString("DataSource",DataSource);
       writer.WriteComment("数据库服务器的地址或者数据库服务器名称");
       writer.WriteElementString("InitialCatalog",InitialCatalog);
       writer.WriteComment("指定要访问的数据库名称");
       writer.WriteElementString("TestSql","select * from dtproperties");
       writer.WriteComment("测试用的Sql");
       writer.WriteEndElement();
       writer.WriteEndElement();
       writer.WriteEndDocument();
       writer.WriteComment("DBCore DBConfig.XML");
       writer.Flush();
       writer.Close();
      }


      private void GetDBConfig(string xml)
      {
       XmlTextReader reader = null;
       try
       {
        reader = new XmlTextReader(xml);
        while(!reader.EOF)
        {
         while(reader.Read())
         {
          if (reader.NodeType == XmlNodeType.Element)
          {
           switch(reader.Name)
           {
            case "Sql":
             Sql = reader.ReadElementString("Sql"); break;
            case "OleDb":
             OleDb = reader.ReadElementString("OleDb"); break;
            case "Odbc":
             Odbc = reader.ReadElementString("Odbc"); break;
            case "DBConnection":
             DBConnection = reader.ReadElementString("DBConnection"); break;
            case "UserID":
             UserID = reader.ReadElementString("UserID"); break;
            case "Password":
             Password = reader.ReadElementString("Password"); break;
            case "DataSource":
             DataSource = reader.ReadElementString("DataSource"); break;
            case "InitialCatalog":
             InitialCatalog = reader.ReadElementString("InitialCatalog"); break;
            case "TestSql":
             TestSql =  reader.ReadElementString("TestSql"); break;
           }
          }
          else if (reader.NodeType == XmlNodeType.EndElement)
          {
           break;
          }
         }
        }
       }
       finally
       {
        if (reader != null)  reader.Close();
       }
      }


      private DBCore.DataBaseVisitor.AbsDBHelper GetDBHelper()
      {
       DBCore.DataBaseVisitor.AbsDBHelper dbhelper ;
       switch(DBConnection)
       {
        case "Sql":
         dbhelper = new DBCore.DataBaseVisitor.JSLSqlHelper();
         Sql = Sql.Replace("$0$",UserID);
         Sql = Sql.Replace("$1$",Password);
         Sql = Sql.Replace("$2$",DataSource);
         Sql = Sql.Replace("$3$",InitialCatalog);
         dbhelper.SetDBConnection = Sql;
         break;
        case "OleDb":
         dbhelper = new DBCore.DataBaseVisitor.JSLOleDbHelper();
         OleDb = OleDb.Replace("$0$",UserID);
         OleDb = OleDb.Replace("$1$",Password);
         OleDb = OleDb.Replace("$2$",DataSource);
         OleDb = OleDb.Replace("$3$",InitialCatalog);
         dbhelper.SetDBConnection = OleDb;
         break;
        case "Odbc":
         dbhelper = new DBCore.DataBaseVisitor.JSLOdbcHelper();
         Odbc = Odbc.Replace("$0$",UserID);
         Odbc = Odbc.Replace("$1$",Password);
         Odbc = Odbc.Replace("$2$",DataSource);
         Odbc = Odbc.Replace("$3$",InitialCatalog);
         dbhelper.SetDBConnection = Odbc;
         break;
        default :
         dbhelper = null;
         break;
       }
       return dbhelper;
      }


      #endregion

      private void bt_SaveFile_Click(object sender, System.EventArgs e)
      {
       System.Windows.Forms.SaveFileDialog SFD;
       SFD = new System.Windows.Forms.SaveFileDialog();
       SFD.Filter = "txt files (*.txt)|*.txt|sql Files(*.sql)|*.sql|All files (*.*)|*.*";
       SFD.Title = "Save an Sql/Text File";
       SFD.RestoreDirectory = true ;
       if (SFD.ShowDialog() == DialogResult.OK)
       {
        if(SFD.FileName != "")
        {
         using (System.IO.StreamWriter sw = new System.IO.StreamWriter(SFD.OpenFile(),System.Text.Encoding.GetEncoding("gb2312")))
         {
          sw.Write(this.rtb_sql.Text);
          sw.Close();
         }
        }
       }
      }


     }

  • 相关阅读:
    代码审核工具是gerrit
    Redis分布式缓存承载于 “Microsoft.Extensions.Caching.Redis”这个NuGet包
    .Net Core之JWT授权
    什么是前端路由
    为什么需要线程池?什么是池化技术?
    架构模式
    UI 多线程处理 WPF
    项目管理艺术
    项目与项目管理
    使用 MicroK8s 和 OpenEBS 扩展 Kubernetes 存储
  • 原文地址:https://www.cnblogs.com/bigmouthz/p/323037.html
Copyright © 2020-2023  润新知