пятница, 27 декабря 2013 г.

C# PropsAppReader - чтение файла формата "tag1...\tag1"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;

namespace Solution.Framework
{
    class PropsAppReader
    {
        string fileName;
        string[] fileText;
        
        
        public PropsAppReader(string f_fileName)
        {
            this.fileName = f_fileName;
            fileText= File.ReadAllLines(f_fileName);
        }

        public string GetValueByParamName(string paramName)      
        {
            string sPattern = "(?<=<" + paramName + ">)(.*)(?=</" + paramName + ">)";
            string OneString = "";

            foreach (string s in fileText)
                OneString += s;


            return Regex.Match(OneString, sPattern).Value.ToString().Trim();
        }


        public string[] GetAllText()
        {
            return fileText;
        }
    }
}


Использование класса Solution:

...

PropsAppReader scriptManager = new PropsAppReader(file_path);


string val1 = PropsAppReader.GetValueByParamName("tag1-name")

string val2 = PropsAppReader.GetValueByParamName("tag2-name")
...
string valN = PropsAppReader.GetValueByParamName("tagN-name")
...


Структура файла:

<tag1-name>Tag1_value</tag1-name>
<tag2-name>Tag2_value</tag2-name>
...
<tagN-name>TagN_value</tagN-name>

вторник, 10 декабря 2013 г.

Автоматический backup базы данных (*.bak) MS SQL Server 2008


sqlcmd -S DECLSERVER\SQLGTD -E -Q "declare @s varchar(255) set @s='E:\backup\GTD_' + convert(varchar(1), datepart(dw, getdate())) + '.bak' backup database GTD to disk = @s with init, noformat, skip, nounload"

sqlcmd позволяет вводить инструкции Transact-SQL, системные процедуры и файлы скриптов из командной строки в редактор запросов в режиме SQLCMD,

где:

  • -S — задает имя сервера, server[\instance_name]
  • DECLSERVER\SQLGTD — имя сервера/имя экземпляра, на котором крутится база;
  • -E — использует для соединения с SQL server вместо имени пользователя и пароля доверительное соединение;
  • -Q " cmdlinequery " — при запуске программы sqlcmd выполняет запрос, но выход из программы по завершении его выполнения не производится. Может быть выполнено несколько запросов, разделенных точкой с запятой. Заключайте запрос в кавычки, как показано выше;
  • declare — объявляем переменную s ,имя переменной всегда начинается с @, поэтому @s. В нашем случае @s — это папка (диск) хранения бэкапов;
  • varchar(n) — задает тип переменной @s как строковый с длинной строки n, в примере 255 символов;
  • set — задает значение переменной @s,в примере это папка backup на диске E (E:\backup\), далее задается имя бэкап файла, где набор функций convert(varchar(1), datepart(dw, getdate())) возвращает в текстовом формате с длиной в 1 символ текущий день недели (понедельник – 1, вторник – 2, и т.д.) и добавляется расширение bak. На выходе получим файл с именем GTD_номер дня недели.bak;
  • backup — создает бэкап;
  • database — указывает на создание бэкапа всей базы;
  • GTD — в нашем примере имя базы на SQLсервере;
  • to disk — указывает на тип устройства резервного хранения, файл жесткого диска, и указана переменная @s, которой присвоено путь и имя создаваемого файла;
  • with init, noformat, skip, nounload — указывает на то, что необходимо произвести перезапись данных по кругу с переопределением заголовков, что позволит нам иметь 7 файлов бэкапа на каждый день недели, перезаписываемые по кругу.

Именно для моего случая строка сценария будет иметь следующий вид:
sqlcmd -S SR-P2K-ORE -E -Q "declare @s varchar(255) set @s='D:\askue-backup\sr-p2k-ore\Piramida2000new_' + replace(replace(replace(CONVERT(VARCHAR(19), GETDATE(), 120), '-', '_'), ':', '_'), ' ', '__') + '.bak' backup database Piramida2000new to disk = @s with init, noformat, skip, nounload"

среда, 30 октября 2013 г.

C# DataGridView select row by right mouse button click



private void dgv_MouseDown(object sender, MouseEventArgs e)
{
    DataGridView.HitTestInfo Hti;

    if (e.Button == MouseButtons.Right)
    {
        Hti = dgv.HitTest(e.X, e.Y);

        if (Hti.Type == DataGridViewHitTestType.Cell)
        {
            if (!((DataGridViewRow)(dgv.Rows[Hti.RowIndex])).Selected)
            {
                dgv.ClearSelection();
                ((DataGridViewRow)dgv.Rows[Hti.RowIndex]).Selected = true;
            }
        }
    }
}

понедельник, 30 сентября 2013 г.

C# TreeView node populate from DataTable

private void Form19_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable("data");

    dt.Columns.Add("id",typeof(int));
    dt.Columns.Add("ParentId",typeof(int));
    dt.Columns.Add("description");
    dt.Columns.Add("link");
    dt.Rows.Add(1, null, "Root", "www.microsoft.com");
    dt.Rows.Add(2, 1, "Child1", "www.microsoft.com");
    dt.Rows.Add(3, 1, "Child2", "www.microsoft.com");
    dt.Rows.Add(4, 2, "GrandChild1", "www.microsoft.com");
    dt.Rows.Add(5, 2, "GrandChild2", "www.microsoft.com");
    dt.Rows.Add(6, 2, "GrandChild3", "www.microsoft.com");
    dt.Rows.Add(7, 3, "GrandChild4", "www.microsoft.com");
    dt.Rows.Add(8, 3, "GrandChild5", "www.microsoft.com");


    //Use a DataSet to manage the data
    DataSet ds = new DataSet();
    ds.Tables.Add(dt);

    //add a relationship
    ds.Relations.Add("rsParentChild",
                     ds.Tables["data"].Columns["id"],
                     ds.Tables["data"].Columns["ParentId"]);

    foreach (DataRow dr in ds.Tables["data"].Rows)

    {
        if (dr["ParentId"] == DBNull.Value)
        {
            TreeNode root = new TreeNode(dr["description"].ToString());
            root.Tag = dr["link"].ToString();
            treeView1.Nodes.Add(root);
            PopulateTree(dr, root);
        }
    }
    treeView1.ExpandAll();
}

public void PopulateTree(DataRow dr, TreeNode pNode)
{

    foreach (DataRow row in dr.GetChildRows("rsParentChild"))
    {
        TreeNode cChild = new TreeNode(row["description"].ToString());
        cChild.Tag = row["link"].ToString();
        pNode.Nodes.Add(cChild);

        //Recursively build the tree
        PopulateTree(row, cChild);
    }}

четверг, 10 января 2013 г.

C# + MS SQL Server

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace Sulution.Framework.Core
{
    public class SQLServerConnector
    {        
        SqlConnection con;
        SqlCommand cmd = null;
        SqlDataReader reader = null;

        public SQLServerConnector()
        {
            con = new SqlConnection();
        }

        public void SetParams(  string server,
                                string user,
                                string pwd)
        {            con.ConnectionString = "User ID=" + user + ";" +
                        "password=" + pwd + ";server=" + server + ";" +
                        "connection timeout=30";
        }

        public bool Connect()
        {
            try
            {
                con.Open();
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                
                return false;
            }

            return true;
        }

        public void Close()
        {
            con.Close();
        }

        public SqlDataReader ExecQuery(string text)
        {
            cmd = new SqlCommand(text, con);
            reader = cmd.ExecuteReader();

            return reader;
        }    
    }
}

Docker. Первые контейнеры

Источник:  php.dragomano.ru Структура каталогов: ~/develop/web/project/                  nginx/      - сервис web-сервера                php...