2010-12-13 10 views
6

मैं एक एक्सेस डेटाबेस के साथ VB.NET का उपयोग कर रहा हूं, मैं मान डालता हूं लेकिन फिर मुझे अंतिम डालने वाली आईडी (ऑटो नंबर) प्राप्त करने और संबंधित तालिका में डालने की आवश्यकता होती है।vb.net sql अंतिम डाला गया आईडी

मैंने @@ पहचान और MAX (कॉलम) की कोशिश की है लेकिन @@ पहचान शून्य लौटाती है और MAX बहुत भरोसेमंद नहीं है (कभी-कभी डेटा डालने में धीमा होता है, इसलिए डालने से पहले आईडी प्राप्त करें)।

Dim insertSql = datalayer.getDataTable((String.Format("INSERT INTO users (username) VALUES ({0})", username))) 

Dim newID = datalayer.getDataTable((String.Format("SELECT @@IDENTITY FROM users"))) 


Dim con As OleDbConnection = getConnection() 
con.Open() 
Dim sqlCommand As OleDbCommand = New OleDbCommand(String.Format(insertSql), con) 
sqlCommand.ExecuteNonQuery() 

यह दो कार्यों में किया जाता है, इसलिए उपर्युक्त कोड भ्रमित लग सकता है, लेकिन यह केवल दो कार्यों से लिया गया है। दो कथन निष्पादित किए गए हैं, लेकिन मैंने अभी एक उदाहरण के रूप में निष्पादित किया है।

क्या @@ पहचान और MAX का विकल्प है, क्योंकि मुझे लगता है कि @@ पहचान के साथ गलत कैसे चल रहा है?

किसी भी सलाह के लिए धन्यवाद :)।

+0

, मेरा आखिरी संपादित देखें के बारे में पहुँच एक आदेश में कई बयानों का समर्थन नहीं। क्या आप पुष्टि कर सकते हैं कि यह वास्तव में काम करता है या आप किसी अन्य दृष्टिकोण के लिए जाते हैं? –

उत्तर

6

यह SELECT @@ पहचान से बिल्कुल महत्वपूर्ण है, डालने की तुलना में उसी कनेक्शन (और लेनदेन) पर निष्पादित किया जाता है। यदि आपकी getDataTable() विधि प्रत्येक कॉल के लिए एक नया कनेक्शन बनाता है, तो यही कारण है कि यह काम नहीं कर रहा है।

अद्यतन

एक और दृष्टिकोण है जो बेहतर है में एक

sql = "INSERT INTO...;SELECT @@IDENTITY..." 
Dim id = sqlCommand.ExecuteScalar(sql) 

अद्यतन दो स्टेटमेंट्स को निष्पादित करने के लिए है फिर

ऐसा लगता है कि जैसे कई कार्यों को अंजाम नहीं कर सकते यह एक एमएस एक्सेस डेटाबेस, Running multiple SQL statements in the one operation के खिलाफ है।

+0

हाय, हाँ यह एक नया कनेक्शन नहीं बनाता है। अगर मैंने डेटाबेस में फॉर्म लोड पर सिर्फ एक कनेक्शन बनाया है, तो क्या यह सम्मिलित करने, अद्यतन आदि के लिए भी काम करेगा? धन्यवाद – Elliott

+0

+1 'SQL निष्पादन' विधि के साथ एक तरीका प्रदान करने के लिए, दो SQL कथन लपेटें। वह, मैंने कभी इसके बारे में सोचा नहीं होगा। =) –

+0

धन्यवाद इसे हल किया गया। – Elliott

0

आप बस निम्न कोड का उपयोग कर सकते हैं। मुझे लगता है कि आप SQLDataSource इस्तेमाल किया और घटना है:

Protected Sub SqlDataSource1_Inserted(sender As Object, e As SqlDataSourceStatusEventArgs) Handles SqlDataSource1.Inserted 
Dim query As String = "SELECT @@IDENTITY" 
Dim cmd As New OleDbCommand(query, CType(e.Command.Connection, OleDbConnection)) 
Dim newid As Integer = cmd.ExecuteScalar() 
l1.Text = newid 
End Sub 
संबंधित मुद्दे