2008-11-04 17 views
6

मैं एक डमी एसक्यूएल कथन की तलाश में हूं जो कनेक्टिविटी की जांच के लिए सी # एसक्यूएल कनेक्शन से काम करेगा।एसक्यूएल कथन?

मूल रूप से मैं डेटाबेस के लिए एक अनुरोध भेजने की जरूरत है, मुझे परवाह नहीं है कि यह क्या देता है मैं सिर्फ अगर डेटाबेस अभी भी वहाँ है यह सफल हो सकता है और यदि डेटाबेस नहीं है एक अपवाद फेंक करना चाहते हैं।

परिदृश्य मैं के लिए परीक्षण कर रहा हूँ डेटाबेस, जहां SQLConnections राज्य संपत्ति अभी भी "खोलें" प्रतीत हो रहा है लेकिन कोई कनेक्टिविटी है से कनेक्टिविटी का नुकसान है।

उत्तर

4

अधिकांश SQL डेटाबेस इस उद्देश्य के लिए एक 'तालिका' की है।

डीबी 2 में, यह है:

select * from sysibm.sysdummy1 

ओरेकल है, जबकि,, स्मृति से

select * from dual 

यह वापस अंत में डेटाबेस पर निर्भर करेंगे।

7

आप ऐसा कर सकता है:

Select 1 

ठीक है, कैसे कोई रिक्त स्ट्रिंग या रिक्त स्थान भेजने के बारे में। वे SQL सर्वर के लिए मान्य आदेश हैं।

+0

SQL सर्वर के लिए ठीक है, लेकिन यह डीबी 2 या ओरेकल के लिए काम नहीं करेगा। पैक्स डायब्लो का जवाब देखें। – Dave

1

यदि आप एक नया कनेक्शन खोलने में क्योंकि डाटाबेस उपलब्ध नहीं है पा रहे हैं तो आपको एक त्रुटि मिलना चाहिए।

यह मेरे लिए लगता है कि आप एक कनेक्शन हर समय खोलने रख रहे हैं (जो आमतौर पर एक बुरा विचार है - एक नए कनेक्शन खोला जाना चाहिए इससे पहले कि एक बैच निष्पादित किया जाता है)। क्या यह मामला है?

+0

हाँ बैच शुरू होने पर एक नया कनेक्शन खोला जाता है लेकिन बैच 15 मिनट से ऊपर ले सकता है। –

+0

ठीक है ... तो फिर क्या? बैच कुछ मिनटों के बाद निरस्त करता है? क्या आपका कनेक्शन टाइमआउट काफी ऊंचा है? (यह 2 मिनट तक डिफ़ॉल्ट है। – StingyJack

2

कनेक्टिविटी का नुकसान किसी भी समय हो सकता है।

क्या होगा अगर प्रस्तावित SELECT स्टेटमेंट्स ठीक निष्पादित, लेकिन कनेक्शन के तुरंत बाद टूट जाता है (सफलतापूर्वक) उन्हें क्रियान्वित?

+0

यदि आप केवल स्वास्थ्य जांच लिख रहे हैं, तो यह अभी भी उपयोगी हो सकता है कि डेटाबेस कनेक्शन जीवित है (या अधिक महत्वपूर्ण रूप से, ज़िंदा नहीं) समय पर किसी खास समय पर। –

1

सरलतम विधि है कि कुछ नहीं करता है कुछ चुने हुए निष्पादित करने के लिए है।

SELECT N'Test' 
0

बेहतर होगा कि अपने कार्यान्वयन हर एसक्यूएल बयान आप निष्पादित, बल्कि कनेक्टिविटी के लिए परीक्षण करने के लिए एक डमी बयान का उपयोग करने से के लिए नहीं जुड़ा हुआ है अपवाद को पकड़ने के लिए। मैंने सिस्टम को देखा है जहां डेटाबेस के सीपीयू समय के 10% से ऊपर इन डमी प्रश्नों का जवाब दिया जाता है।

0

उदाहरण डेल्फी कोड, मुझे विश्वास है जो आसान हो जाएगा अनुकूल करने के लिए:

function IsConnValid(var Conn: TADOConnection; DBType: TDBType): boolean; 
var 
    qry : TADOQuery; 
begin 
    //gimme a connection, and i'll create a query, try to retrieve dummy data. 
    //if retrieval works, return TRUE. otherwise, return FALSE. 
    qry := TADOQuery.Create(nil); 
    try 
    qry.Connection := Conn; 

    case DBType of 
     //syntax for a dummy query varies by vendor. 
     dbOracle : qry.Sql.Add('SELECT 1 FROM DUAL'); 
     dbSqlServer : qry.Sql.Add('SELECT 1'); 
    end; //case 

    try 
     qry.Open; 
     //try to open the query. 
     //if we lost the connection, we'll probably get an exception. 
     Result := not(qry.Eof); //a working connection will NOT have EOF. 
     qry.Close; 
    except on e : exception do 
     //if exception when we try to open the qry, then connection went bye-bye. 
     Result := False; 
    end; //try-except 
    finally 
    qry.Free; 
    end; //try-finally 
end; 
0

एक जानने यदि डेटाबेस के लिए कनेक्शन अभी भी वास्तव में मौजूद है की जिस तरह से, कनेक्शन पर कुछ कार्रवाई करने के लिए प्रयास करने के लिए है । यदि कनेक्शन की मृत्यु हो गई है, तो कनेक्शनस्टेट प्रॉपर्टी अभी भी "ओपन" के रूप में बनी हुई है, लेकिन जब आप इसके साथ कुछ करने की कोशिश करते हैं और आपको अपना अपवाद मिल जाएगा। उदाहरण के लिए:

SqlConnection sqlConn; 
    private bool dbConnectionExists() { 
     try 
     { 
      sqlConn.ChangeDatabase("MyDBname"); 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (dbConnectionExists()) 
     { 
      // Connection ok so do something    
     } 
    } 

connectionState संपत्ति परिवर्तन करने के लिए "बंद" एक बार आपरेशन के इस प्रकार का प्रदर्शन किया और विफल रहता है, तो आप उस समय राज्य की जाँच कर सकते हैं अच्छी तरह से करना चाहते हैं।

आशा है कि मदद करता है।

संबंधित मुद्दे