MSSQL’de ciddi bir bug

MSSQL’de tabloya insert cümlesi ile veri atmaya çalışırken aşağıdaki hatayı aldım. İnternet üzerinden yaptığım aramalarda bu hatanın network sorunu olduğundan bahsedilmiş. Oysaki lokalde çalışan 2008 R2 veri tabanı ile çalışıyordum.

A transport-level error has occurred when receiving results from the server. (provider: Session Provider, error: 19 – Physical connection is not usable)

Aşağıdaki gibi bir insert cümlesi kullanıyordum:

INSERT INTO MyTable (RecordDate) VALUES (@RecordDate)

DateTime nesnesini C# tarafında yaratmıştım ve NULL olduğu için aşağıdaki değeri taşıyordu:

01.01.0001 00:00:00

C# nesnemi nullable yapıp insert komutuna eklerken DBNull.Value yapınca sorun düzeldi.

Ama aklım hala Microsoft gibi bir firmanın DateTime hatası dönmek yerine fiziksel bağlantının koptuğu yönünde bir mesaj veriyor olması.

SOAMANAGER’ı yetkisiz çalıştırmak

SE93 t-code’undan WDYID t-code’unu girerek çalıştırın:

Application parametresine APPL_SOAP_MANAGEMENT
Start Mode parametresine ise BROWSER girerek raporu yürütün.

Exit bulmak

CL_EXITHANDLER class’ının GET_INSTANCE methoduna break point koyarsanız, programlar exit çağırmaya çalıştığında yakalayabilirsiniz.

İki tarih arasındaki gün sayısı

call function 'DAYS_BETWEEN_TWO_DATES'
exporting
i_datum_bis             = s_date-high
i_datum_von             = s_date-low
i_stgmeth               = 2
importing
e_tage                  = lv_i
exceptions
days_method_not_defined = 1
others                  = 2.
" i_stgmeth parametresi ay/yıl içindeki gün sayısını belirtmektedir:
" 1 360 gün üzerinden
" 2 gerçek gün sayısı

Enhancement bulmak

Raporlar SXV_GET_CLIF_BY_NAME  fonksiyonunu enhancement isimlerini bulmak için kullanmaktadır. Buraya konulacak break point ile istenilen raporda enhancement olup olmadığı kontrol edilebilir.

Split ranges

data : lv_count  type i,
lv_max    type i,
lv_min    type i,
ranges: rng_vbelv for vbfa-vbelv.
ranges: lrng_vbelv for vbfa-vbelv.  "local range.


clear: lv_count, lv_max.
lv_min = 0.
describe table rng_vbelv lines lv_count.
while lv_max lt lv_count.
lv_max = lv_min + 1000.
if lv_max gt lv_count.
lv_max = lv_count.
endif.
refresh lrng_vbelv.
loop at rng_vbelv from lv_min to lv_max.
append rng_vbelv to lrng_vbelv.
endloop.
lv_min = lv_max.
select b~vbeln a~vbelv b~wadat_ist b~kunnr b~ernam b~erzet b~erdat
appending table lt_itab
from vbfa as a
inner join likp as b
on a~vbeln eq b~vbeln
where a~vbelv in lrng_vbelv
order by b~vbeln.
endwhile.

Optimize Ranges

ranges: rng_vbelv for vbfa-vbelv.

*&---------------------------------------------------------------------*
*&      Form  OPTIMIZE_RANGE
*&---------------------------------------------------------------------*
form optimize_range.
data:    lv_lvbelv like vbfa-vbelv,   "önceki
lv_nvbelv like vbfa-vbelv,   "yenisi
lv_vbelv  like vbfa-vbelv,   "yenisi
lv_aralik(1),                "aralık
lv_ltabix like sy-tabix,
lv_ntabix like sy-tabix.

sort rng_vbelv.
clear: lv_lvbelv, lv_nvbelv, lv_aralik.
loop at rng_vbelv.
lv_ntabix = sy-tabix.
lv_nvbelv = rng_vbelv-low.
lv_vbelv = lv_nvbelv - 1.
*    condense lv_vbelv.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input  = lv_vbelv
importing
output = lv_vbelv.

if lv_lvbelv is not initial and lv_lvbelv eq lv_vbelv.
lv_ltabix = lv_ntabix - 1.
read table rng_vbelv index lv_ltabix.
rng_vbelv-option = 'BT'.
rng_vbelv-high   = lv_nvbelv.
modify rng_vbelv index lv_ltabix.
delete rng_vbelv index lv_ntabix.
lv_lvbelv = lv_nvbelv.
continue.
endif.
lv_lvbelv = lv_nvbelv.
endloop.
describe table rng_vbelv lines sy-index.
endform.                    " OPTIMIZE_RANGE