2016年7月20日 星期三

Linux Static Route 檔案作法

一般如果我們要在Linux上面有兩個interface讓其可以連同內部網路與外部網路,通常會一個設定gateway另外一個不設定。然後利用static route的方式來進行。

通常可以使用route add指令來進行新增,但缺點是重新啟動後,routing消失。除非設定一個shell讓開機執行。

因此我們可以設定在檔案裏面:

/etc/sysconfig/network-scripts/route-ethX
如:
/etc/sysconfig/network-scripts/route-eth1

設定內容如下:
192.168.0.0/19 via 192.168.81.254 dev eth1
172.21.0.0/16 via 192.168.81.254 dev eth1
172.22.0.0/16 via 192.168.81.254 dev eth1
172.23.0.0/16 via 192.168.81.254 dev eth1
172.24.0.0/16 via 192.168.81.254 dev eth1

172.25.0.0/16 via 192.168.81.254 dev eth1

2016年7月3日 星期日

windows 工作排程器簡易說明

Windows 工作排程器是屬於最方便應用的排程程式自動執行的方式。 從以前的xp => 2003 => 2008 => 2012,都有一些改進。 然而在設定上也一些小細節我也是最近才特別注意到:








如果我們像圖片一樣勾選,這樣無論我們設計的是GUI或是主控台程式都會丟到類似背景執行無法看到程式卡在哪裡??(當程式出現:此例項工作已經在執行中...)

如果我們想要讓程式可以在前台執行就要勾選只有使用者登入才執行。(鎖定windows也會執行)

另外建議勾選部要儲存密碼,才可以不用每設定完成一個排程就要輸入密碼驗證。

還有當電腦名稱重設時,排程也會因為參考到舊的主機名稱而失效....需重新設定。

2016年6月14日 星期二

C# 讀取Excel File並導入SQL

其實一般要用C#讀取EXCEL可以用oledb,但是我發現Github有人撰寫的.net dll更方便於是紀錄一下。
Excel DataReader


public void loadEachXls(string areaTB, int sheet)
{
// Excel 檔案位置
String tmpfilePath = ConfigurationManager.AppSettings["tmpfilePath"];
string filePath = tmpfilePath;

// 你要抓取 Excel檔裡的工作表名稱
//string set = "工作表1";

// 讀取 Excel檔案
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);

// 創建讀取 Excel檔
IExcelDataReader excelRead = ExcelReaderFactory.CreateOpenXmlReader(stream);

// 將讀取到 Excel檔暫存至內存
DataSet result = excelRead.AsDataSet();

// 獲得 Excel檔的行與列的數目
int columns = result.Tables[sheet].Columns.Count;
int rows = result.Tables[sheet].Rows.Count;

using (SqlConnection cn = new SqlConnection("server=10.10.0.x;Connection Timeout=10;MultipleActiveResultSets=True;database=CMTS;uid=xxxxx;pwd=xxxxxxxxxx"))
{
 cn.Open();
 String deleteMac = "truncate table CMTS.[dbo]." + areaTB;
 SqlCommand cmd = new SqlCommand(deleteMac, cn);
 cmd.ExecuteNonQuery();

 cmd.CommandText = @"insert into CMTS.dbo." + areaTB + " (sid,bsr,node,area,penetration) VALUES (@v1,@v2,@v3,@v4,@v5)";

 // 將資料讀取出來
 for (int i = 1; i < rows; i++)
 {
  for (int j = 0; j < columns; j++)
  {
   string data = result.Tables[sheet].Rows[i][j].ToString();

  }
  cmd.Parameters.AddWithValue("@v1", result.Tables[sheet].Rows[i][0].ToString());
  cmd.Parameters.AddWithValue("@v2", result.Tables[sheet].Rows[i][1].ToString());
  cmd.Parameters.AddWithValue("@v3", result.Tables[sheet].Rows[i][2].ToString());
  cmd.Parameters.AddWithValue("@v4", result.Tables[sheet].Rows[i][3].ToString());
  cmd.Parameters.AddWithValue("@v5", "");
  cmd.ExecuteNonQuery();
  cmd.Parameters.Clear();
 }
 // 讀取完後一定要關閉
 excelRead.Close();
}

}

2016年6月2日 星期四

rrdtool dump 簡單說明

Cacti 的基本工具就是rrdtool,當然MRTG是更基本的東西。 當在往管領域運用時如果要Polling大量的設備或是不同的OID時,如果使用Cacti一個樣板慢慢設定可能會瘋掉,於是就需要使用net-snmp搭配shell自行收集snmp回傳的數值再來畫圖。 然而有時候我們會有分析數據的需求又要重rrd的檔案轉到資料庫或是文字檔,有人會使用rrdfetch來取資料,但實際使用會有一些NaN的狀況,尤其是在流量判斷上會造成斷線的誤判,所以改成使用rrdtool dump會是一個比較好的方式。語法如下。

# rrdtools
 /usr/local/rrdtool/bin/rrdtool dump c7606nm02-G1-09H.rrd > test.xml

2016年6月1日 星期三

SQL DBCC

DBCC 依照微軟官方的解釋為:維護資料庫、索引或檔案群組的作業。但其實當我們進行大量的資料刪除時可以使用DBCC指令釋放空間。 DBCC CHECKDB 的檢查與修復對象是指定的資料庫。 DBCC CHECKTABLE 的檢查與修復對象是指定的資料表或索引檢視表。 i.g. DBCC SHRINKFILE('dbname',10) 其他詳細指令可以參考官方網站:https://msdn.microsoft.com/zh-tw/library/ms188796(v=sql.120).aspx

2016年5月30日 星期一

There is already an open DataReader associated with this Command which must be closed first.

這個錯誤訊息常常發生在使用C#的datareader的時候使用同一個connection。
String currentcustomertb = ConfigurationManager.AppSettings["currentcustomertb"];
cmd.CommandText = "SELECT ip,mac FROM " + db +  ".dbo." + currentcustomertb;
SqlDataReader dr = cmd.ExecuteReader();

String replacecurrent = ConfigurationManager.AppSettings["replacecurrent"];

while (dr.Read())
{
 string ip = dr[0].ToString();
 string mac = dr[1].ToString();

 String execReplaceinto = "exec " + db + ".dbo." + replacecurrent + " @cmmac = '" + mac + "' , @cmip = '" + ip + "'";
 SqlCommand cmdexec = new SqlCommand(execReplaceinto, cn);
 cmdexec.ExecuteNonQuery();
 cmdexec.Dispose();
}
因為這個dr與內部的ExecuteNonQuery,所以就會出現這個錯誤訊息。所以有人建議使用不同的connection來避免這個問題。 或是在連線字串加入:MultipleActiveResultSets=True;

2016年5月29日 星期日

C# 字串切割小訣竅

通常C#字串切割大家都知道使用Split函數。 例如cr
 
string[] tokens = stringVariable.Split('\r');
那如果,可以試試以下的方法
 
stringVariable.Split(new string[] { "\r\n" }, StringSplitOptions.None);

2016年5月28日 星期六

SyntaxHighlighter Blogger 程式碼顯示外掛

SyntaxHighlighter 是一個簡單好用的外掛,但是要套用在Blogger不能使用html縮寫。

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushColdFusion.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushErlang.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushGroovy.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script language='javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = &#39;http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf&#39;;
SyntaxHighlighter.all();
</script>

CentOS Python 3.7 安裝方式

有些開發的程式在python 3.8的檔案套件不相容,例如pymssql,等。 所以如果不建置虛擬環境的話才特意安裝3.7版本的python 安裝流程如下 # 先進行yum套件的update yum update -y # 安裝相依性套件 yum install gcc o...