markdown
# 背景
因為有RPG程式老舊但一時間又不能轉出來,只能先靠程式去呼叫,
所以就用C#引用AS400元件去呼叫RPG,得到結果。
# 使用DLL
`C:\Program Files (x86)\IBM\Client Access\Shared\cwbx.dll`
# 加入參考的時候要注意內嵌 Interop 型別的問題
REF:http://blog.miniasp.com/post/2010/06/21/dot-net-4-Interop-type-cannot-be-embedded-Use-the-applicable-interface-instead.aspx
# 程式碼參考:
REF:http://forums.asp.net/t/1817332.aspx?calling+as400+programs+from+c+
```C#
using cwbx;
public string getRPGProgramReturnValue(string functionName, string LibraryName, string ProgramName, ProgramParameters parameters, string outputParameterName, out CUDResult msg)
{
msg = new CUDResult();
string result = string.Empty;
StringConverter stringConverter = new StringConverterClass();
AS400System system = new AS400System();
try
{
// 定義 AS400 連線資訊
system.Define("AS400");
system.UserID = "你的帳號";
system.Password = "你的密碼";
//注意:一定要是IP,用domain網址會跳一個"CWB4016 - cwbCO_SetIPAddressW 傳回錯誤碼 87"的錯誤
system.IPAddress = "你的伺服器IP";
system.Connect(cwbcoServiceEnum.cwbcoServiceRemoteCmd);
// 有連線才繼續
if (system.IsConnected(cwbcoServiceEnum.cwbcoServiceRemoteCmd) == 1)
{
// 宣告程式物件 連到系統
cwbx.Program program = new cwbx.Program();
program.LibraryName = LibraryName;
program.ProgramName = ProgramName;
program.system = system;
// 呼叫程式
try
{
program.Call(parameters);
}
catch (Exception ex)
{
msg.status = false;
msg.msg += "呼叫程式時發生錯誤:" + ex.Message + "\n";
if (system.Errors.Count > 0)
{
msg.msg += "呼叫程式時發生system錯誤:";
foreach (cwbx.Error error in system.Errors)
{
msg.status = false;
msg.msg += error.Text + "\n";
}
}
if (program.Errors.Count > 0)
{
msg.msg += "呼叫程式時發生program錯誤:";
foreach (cwbx.Error error in program.Errors)
{
msg.status = false;
msg.msg += error.Text + "\n";
}
}
}
result = stringConverter.FromBytes(parameters[outputParameterName].Value);
}
else
{
msg.status = false;
msg.msg += "無法連線到AS400 ServiceRemoteCmd\n";
}
system.Disconnect(cwbcoServiceEnum.cwbcoServiceAll);
msg.status = true;
}
catch (Exception ex)
{
system.Disconnect(cwbcoServiceEnum.cwbcoServiceAll);
msg.status = false;
msg.msg += "執行" + functionName + "時發生錯誤:" + ex.Message + "\n";
}
return result;
}
```
# 追記
20180530 在改寫舊程式時我把IP換成DOMAIN,因應管理要求,
結果就跳出一個`CWB4016 - cwbCO_SetIPAddressW 傳回錯誤碼 87`的錯誤,
研究了半天想說自己沒改什麼東西,google也查不到什麼,
回頭看自己改的東西才想到那個欄位是IP,該不會不能填網址,
就改回IP,就正常了,算踩到一個雷。
但他還有一個`IPAddressLookupMode`屬性,我是沒試過。
2015年10月30日 星期五
2015年10月28日 星期三
DB2 numeric 百分比 除法
兩個numeric欄位 A與B 都是兩位數
計算(B/A)*100的比率,如果是0就顯示0,或65.43的小數點表示
當A為0時,會無法計算,所以就直接顯示0
重點是CAST轉型為DECIMAL時要記得小數位數是包含在長度內的
如果要顯示123.45這樣三位數字與兩位小數點,長度就是3+2=5
計算(B/A)*100的比率,如果是0就顯示0,或65.43的小數點表示
當A為0時,會無法計算,所以就直接顯示0
重點是CAST轉型為DECIMAL時要記得小數位數是包含在長度內的
如果要顯示123.45這樣三位數字與兩位小數點,長度就是3+2=5
CASE WHEN A is null or A=0 then varchar(0)
else varchar(round(CAST((CAST(COALESCE(B,0) AS FLOAT)/
CAST(COALESCE(A,0) AS FLOAT))*100 AS decimal(5,2)),2))
END AS RATE
標籤:
比率,
除法,
DB2,
divided,
SQL.DECIMAL
2015年10月21日 星期三
Microsoft Exchange server SMTP mail send slowly
SMTP寄信,每封信都要DELAY30秒,
明明已經收到信,但程式還卡在寄信指令那行無法前進,
經查為Exchange Server 有延遲設定,為了做陰影備援
請MIS將所有主機的延遲用以下指令設為零後,寄信都秒送了。
set-ReceiveConnector -Identity "MyExchangeName\Default MyExchangeName" -MaxAcknowledgementDelay 0
參考:
標籤:
Email,
ExchangeServer,
SMTP
2015年10月19日 星期一
VM install Windows Server 2012 accoured error 0x80070570
VM install Windows Server 2012 accoured error 0x80070570
solution: check the md5 code,maybe ISO file not complete.
解法:檢查MD5,不一樣就重抓ISO
來源:LINE群
solution: check the md5 code,maybe ISO file not complete.
解法:檢查MD5,不一樣就重抓ISO
來源:LINE群
標籤:
0x80070570,
VM,
Windows Server 2012
2015年10月13日 星期二
asp.net gridview number format dynamic decimal
Text='<%# Eval("column_name","{0:#0.#}") %>'
0→00.1→0.1
標籤:
asp.NET,
GridView,
number format
2015年10月7日 星期三
2015年10月2日 星期五
ORA-12704 字元設定不符合
我在做小計總計報表
用了group by rollup來做群組,還有grouping(欄位名稱)來判斷小計行跟總計行
因為小計跟總計行的時候被群組的欄位會留白,要塞一些字進去
就用了case when grouping.... then '這是小計'的判斷
然後就跳錯ORA-12704
查很多網頁都說字串引號前面加一個N來轉型
但是很討厭的是加上去後,那個字串後developer裡面的sql全部都會變成字串顏色
解決方法就是把這個字串轉型就好了
cast('總計' as nvarchar2(20))
用了group by rollup來做群組,還有grouping(欄位名稱)來判斷小計行跟總計行
因為小計跟總計行的時候被群組的欄位會留白,要塞一些字進去
就用了case when grouping.... then '這是小計'的判斷
然後就跳錯ORA-12704
查很多網頁都說字串引號前面加一個N來轉型
但是很討厭的是加上去後,那個字串後developer裡面的sql全部都會變成字串顏色
解決方法就是把這個字串轉型就好了
cast('總計' as nvarchar2(20))
標籤:
group by rollup,
grouping,
ORA-12704,
Oracle
訂閱:
文章 (Atom)