public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { try { /* * sScrNo – 화면번호 * sRQName – 사용자구분 명 * sTrCode – Tran 명 * sRecordName – Record 명 * sPreNext – 연속조회 유무 */ String 종목코드 = "XXXX"; String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}"; String keyStockCode = String.Format(keyStockCodeLayout, e.sRQName, e.sTrCode, e.sScrNo); 종목코드 = AppLib.getClass1Instance().getStockCode(keyStockCode); String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}"; String key = String.Format(keyLayout, e.sRQName, e.sTrCode, e.sScrNo, 종목코드); spell = AppLib.getClass1Instance().getSpell(key).ShallowCopy(); TB_OPT10001 tmp = new TB_OPT10001(); String 종목코드1 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "종목코드").Trim(); if (종목코드1.Equals("")) { 종목코드1 = 종목코드;//일부 종목코드들은 아래 데이터가 아예 안나온다. ///51A077 } tmp.stock_cd = 종목코드1; String 결산월 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "결산월").Trim(); tmp.settlement_mm = 결산월; String str액면가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "액면가").Trim(); int 액면가 = 0; int.TryParse(str액면가.Trim(), out 액면가); tmp.face_amt = 액면가; String str자본금 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "자본금").Trim(); int 자본금 = 0; int.TryParse(str자본금.Trim(), out 자본금); tmp.capital_amt = 자본금; String str상장주식 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "상장주식").Trim(); int 상장주식 = 0; int.TryParse(str상장주식.Trim(), out 상장주식); tmp.stock_cnt = 상장주식; String str신용비율 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "신용비율").Trim(); float 신용비율 = 0; float.TryParse(str신용비율.Trim(), out 신용비율); tmp.credit_rt = 신용비율; String str연중최고 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "연중최고").Trim(); int 연중최고 = 0; int.TryParse(str연중최고.Trim(), out 연중최고); tmp.year_high_amt = 연중최고; String str연중최저 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "연중최저").Trim(); int 연중최저 = 0; int.TryParse(str연중최저.Trim(), out 연중최저); tmp.year_low_amt = 연중최저; String str시가총액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "시가총액").Trim(); int 시가총액 = 0; int.TryParse(str시가총액.Trim(), out 시가총액); tmp.total_mrkt_amt = 시가총액; String str시가총액비중 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "시가총액비중").Trim(); float 시가총액비중 = 0; float.TryParse(str시가총액비중.Trim(), out 시가총액비중); tmp.total_mrkt_amt_rt = 시가총액비중; String str외인소진률 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "외인소진률").Trim(); float 외인소진률 = 0; float.TryParse(str외인소진률.Trim(), out 외인소진률); tmp.foreigner_exhaustion_rt = 외인소진률; String str대용가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "대용가").Trim(); int 대용가 = 0; int.TryParse(str대용가.Trim(), out 대용가); tmp.substitute_amt = 대용가; String strPER = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "PER").Trim(); float PER = 0; float.TryParse(strPER.Trim(), out PER); tmp.per = PER; String strEPS = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "EPS").Trim(); int EPS = 0; int.TryParse(strEPS.Trim(), out EPS); tmp.eps = EPS; String strROE = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "ROE").Trim(); float ROE = 0; float.TryParse(strROE.Trim(), out ROE); tmp.roe = ROE; String strPBR = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "PBR").Trim(); float PBR = 0; float.TryParse(strPBR.Trim(), out PBR); tmp.pbr = PBR; String strEV = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "EV").Trim(); float EV = 0; float.TryParse(strEV.Trim(), out EV); tmp.ev = EV; String strBPS = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "BPS").Trim(); int BPS = 0; int.TryParse(strBPS.Trim(), out BPS); tmp.bps = BPS; String str매출액 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "매출액").Trim(); int 매출액 = 0; int.TryParse(str매출액.Trim(), out 매출액); tmp.sales = 매출액; String str영업이익 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "영업이익").Trim(); int 영업이익 = 0; int.TryParse(str영업이익.Trim(), out 영업이익); tmp.business_profits = 영업이익; String strD250최고 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "250최고").Trim(); int D250최고 = 0; int.TryParse(strD250최고.Trim(), out D250최고); tmp.d250_high_amt = D250최고; String strD250최저 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "250최저").Trim(); int D250최저 = 0; int.TryParse(strD250최저.Trim(), out D250최저); tmp.d250_low_amt = D250최저; int 시가 = int.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "시가").Trim()); //[23] int 고가 = int.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "고가").Trim()); //[24] int 저가 = int.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "저가").Trim()); //[25] int 상한가 = int.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "상한가").Trim()); //[26] int 하한가 = int.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "하한가").Trim()); //[27] int 기준가 = int.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "기준가").Trim()); //[28] tmp.start_amt = 시가; tmp.high_amt = 고가; tmp.low_amt = 저가; tmp.upper_amt_lmt = 상한가; tmp.lower_amt_lmt = 하한가; tmp.yesterday_amt = 기준가; String str예상체결가 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "예상체결가").Trim(); int 예상체결가 = 0; int.TryParse(str예상체결가.Trim(), out 예상체결가); tmp.expectation_contract_amt = 예상체결가; String str예상체결수량 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "예상체결수량").Trim(); int 예상체결수량 = 0; int.TryParse(str예상체결수량.Trim(), out 예상체결수량); tmp.expectation_contract_qty = 예상체결수량; String D250최고가일 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "250최고가일").Trim(); tmp.d250_high_dt = D250최고가일; float D250최고가대비율 = float.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "250최고가대비율").Trim()); tmp.d250_high_rt = D250최고가대비율; String D250최저가일 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "250최저가일").Trim(); tmp.d250_low_dt = D250최저가일; float D250최저가대비율 = float.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "250최저가대비율").Trim()); tmp.d250_low_rt = D250최저가대비율; int 현재가 = int.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "현재가").Trim()); tmp.curr_amt = 현재가; int 대비기호 = int.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "대비기호").Trim()); tmp.contrast_symbol = 대비기호; int 전일대비 = int.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "전일대비").Trim()); tmp.contrast_yesterday = 전일대비; float 등락율 = float.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "등락율").Trim()); tmp.fluctuation_rt = 등락율; int 거래량 = int.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "거래량").Trim()); tmp.trade_qty = 거래량; float 거래대비 = float.Parse(axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "거래대비").Trim()); tmp.trade_contrast = 거래대비; tmp.face_amt_unit = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "액면가단위").Trim(); String str유통주식 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "유통주식").Trim(); //[31] int 통주식 = 0; int.TryParse(str유통주식.Trim(), out 통주식); tmp.distribution_stock = 통주식; String str유통비율 = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, 0, "유통비율").Trim(); //[31] float 통비율 = 0; float.TryParse(str유통비율.Trim(), out 통비율); tmp.distribution_stock_rt = 통비율; //이것은 연속적이지 않기 때문에 바로 제거 한다. AppLib.getClass1Instance().removeSpellDictionary(spell.key); int position = spell.key.LastIndexOf("|"); String key1 = spell.key.Substring(0, position); AppLib.getClass1Instance().removeStockCodeDictionary(key1); //래치를 호출해서 잠김을 제거한다.--래치 일단 제거 호출하는데도 제거 했다. 1초에 5번 호출 규칙만 적용해보자. AppLib.getClass1Instance().setOpt10081(spell.sTrCode); DailyData dd = new DailyData(); dd.insertOpt10001(tmp); } catch (Exception ex) { FileLog.PrintF("[ALERT-ReceivedData-OPT10001]Exception ex=" + ex.Message); } }
public void insertOpt10001(TB_OPT10001 tmp) { using (var conn = new NpgsqlConnection(Config.GetDbConnStr())) { try { conn.Open(); String sql = @"CALL insert_tb_opt10001( @stock_cd ,@face_amt ,@capital_amt ,@stock_cnt ,@credit_rt ,@settlement_mm ,@year_high_amt ,@year_low_amt ,@total_mrkt_amt ,@total_mrkt_amt_rt ,@foreigner_exhaustion_rt ,@substitute_amt ,@per ,@eps ,@roe ,@pbr ,@ev ,@bps ,@sales ,@business_profits ,@d250_high_amt ,@d250_low_amt ,@start_amt ,@high_amt ,@low_amt ,@upper_amt_lmt ,@lower_amt_lmt ,@yesterday_amt ,@expectation_contract_amt ,@expectation_contract_qty ,@d250_high_dt ,@d250_high_rt ,@d250_low_dt ,@d250_low_rt ,@curr_amt ,@contrast_symbol ,@contrast_yesterday ,@fluctuation_rt ,@trade_qty ,@trade_contrast ,@face_amt_unit )"; using (var cmd = new NpgsqlCommand(sql, conn)) { //cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@stock_cd", tmp.stock_cd); cmd.Parameters.AddWithValue("@face_amt", tmp.face_amt); cmd.Parameters.AddWithValue("@capital_amt", tmp.capital_amt); cmd.Parameters.AddWithValue("@stock_cnt", tmp.stock_cnt); cmd.Parameters.AddWithValue("@credit_rt", tmp.credit_rt); cmd.Parameters.AddWithValue("@settlement_mm", tmp.settlement_mm); cmd.Parameters.AddWithValue("@year_high_amt", tmp.year_high_amt); cmd.Parameters.AddWithValue("@year_low_amt", tmp.year_low_amt); cmd.Parameters.AddWithValue("@total_mrkt_amt", tmp.total_mrkt_amt); cmd.Parameters.AddWithValue("@total_mrkt_amt_rt", tmp.total_mrkt_amt_rt); cmd.Parameters.AddWithValue("@foreigner_exhaustion_rt", tmp.foreigner_exhaustion_rt); cmd.Parameters.AddWithValue("@substitute_amt", tmp.substitute_amt); cmd.Parameters.AddWithValue("@per", tmp.per); cmd.Parameters.AddWithValue("@eps", tmp.eps); cmd.Parameters.AddWithValue("@roe", tmp.roe); cmd.Parameters.AddWithValue("@pbr", tmp.pbr); cmd.Parameters.AddWithValue("@ev", tmp.ev); cmd.Parameters.AddWithValue("@bps", tmp.bps); cmd.Parameters.AddWithValue("@sales", tmp.sales); cmd.Parameters.AddWithValue("@business_profits", tmp.business_profits); cmd.Parameters.AddWithValue("@d250_high_amt", tmp.d250_high_amt); cmd.Parameters.AddWithValue("@d250_low_amt", tmp.d250_low_amt); cmd.Parameters.AddWithValue("@start_amt", tmp.start_amt); cmd.Parameters.AddWithValue("@high_amt", tmp.high_amt); cmd.Parameters.AddWithValue("@low_amt", tmp.low_amt); cmd.Parameters.AddWithValue("@upper_amt_lmt", tmp.upper_amt_lmt); cmd.Parameters.AddWithValue("@lower_amt_lmt", tmp.lower_amt_lmt); cmd.Parameters.AddWithValue("@yesterday_amt", tmp.yesterday_amt); cmd.Parameters.AddWithValue("@expectation_contract_amt", tmp.expectation_contract_amt); cmd.Parameters.AddWithValue("@expectation_contract_qty", tmp.expectation_contract_qty); cmd.Parameters.AddWithValue("@d250_high_dt", tmp.d250_high_dt); cmd.Parameters.AddWithValue("@d250_high_rt", tmp.d250_high_rt); cmd.Parameters.AddWithValue("@d250_low_dt", tmp.d250_low_dt); cmd.Parameters.AddWithValue("@d250_low_rt", tmp.d250_low_rt); cmd.Parameters.AddWithValue("@curr_amt", tmp.curr_amt); cmd.Parameters.AddWithValue("@contrast_symbol", tmp.contrast_symbol); cmd.Parameters.AddWithValue("@contrast_yesterday", tmp.contrast_yesterday); cmd.Parameters.AddWithValue("@fluctuation_rt", tmp.fluctuation_rt); cmd.Parameters.AddWithValue("@trade_qty", tmp.trade_qty); cmd.Parameters.AddWithValue("@trade_contrast", tmp.trade_contrast); cmd.Parameters.AddWithValue("@face_amt_unit", tmp.face_amt_unit); cmd.ExecuteNonQuery(); } } catch (Exception ex) { FileLog.PrintF("[insertOpt10001]Exception ex=" + ex.Message); //{ "42883: insert_tb_stock(p_market_cd => text, p_stock_cd => text, p_stock_nm => text, p_stock_dt => text, p_cnt => integer, p_last_price => text, p_stock_state => text, p_construction => text) 이름의 함수가 없음"} // Message "42601: 구문 오류, 입력 끝부분" string } } }