2011-04-06 16 views
8

मैं एक पंक्ति सम्मिलित और कुछ इस तरह से नई पंक्ति की पहचान वापस पाने के लिए कोशिश कर रहा हूँ में नई पंक्ति की पहचान को पुन: प्राप्त:एक पंक्ति सम्मिलित करना और SQL सर्वर सीई

INSERT INTO blah....; 
SELECT @@IDENTITY as NewID; 

मैं दोनों को निष्पादित करने के कोशिश कर रहा हूँ सी # में डीबी कॉमांड ऑब्जेक्ट के एकल आमंत्रण के साथ बयान ... यह काम नहीं लगता है या मुझे कुछ गड़बड़ है।

मैं पढ़ा है कि कॉम्पैक्ट संस्करण एक बैच में कई बयान को क्रियान्वित करने का समर्थन नहीं करता ... लेकिन मैं यह भी पाया इस:

आप एक साथ कई प्रश्नों को चलाना चाहते हैं, तो आप एक नया शामिल करना चाहिए प्रत्येक कथन के अंत में प्रत्येक कथन के लिए रेखा वर्ण और अर्धविराम।

स्रोत: http://technet.microsoft.com/en-us/library/bb896140(SQL.110).aspx

तो यह काम करता है या नहीं ... और यदि ऐसा है तो मैं क्या याद आ रही है?

(मुझे एहसास है कि मैं दो आदेश निष्पादित कर सकता हूं और यह ठीक काम करता है, लेकिन मुझे आश्चर्य है कि मुझे कुछ याद आ रहा है)।

+1

"काम नहीं लगता" [एसआईसी] द्वारा आपका क्या मतलब है? क्या होता है? क्या तुम्हें कोई त्रुटि का संदेश मिला है? – Guffa

उत्तर

8

यह एक दस्तावेज़ त्रुटि की तरह दिखता है, यह दूसरी तरफ है। आप केवल ExecuteNonQuery कॉल पर एक कथन निष्पादित कर सकते हैं।

+1

आश्चर्यचकित अगर SQLD [3.5 SP1] (http://technet.microsoft.com/en-us/library/bb896140 (SQL.100) .aspx) के लिए कम से कम 3 बार दोहराया जा सकता है, [3.5 SP2] (http://technet.microsoft.com/en-us/library/bb896140(SQL.105).aspx), और [4.0] (http://technet.microsoft.com/en-us/library/bb896140 (SQL.110) .aspx)? मैं वास्तव में उलझन में मिला है। –

3

आप के साथ sql-server-ce इस तरह के दिशा नहीं आउटपुट हो सकता है के रूप में मैं इस काम मिल गया त्रुटियों की एक बहुत कुछ करने के बाद पहचान मूल्य

sqlCommand Command = Conn.CreateCommand(); 
Command.CommandText = "insert into MyTable(Value1,Value2) values(MyValue,MyValue)" 
Command.ExecuteNonQuery(); 
Command.CommandText = "select @ID = @@IDENTITY" 
SqlParameter ID = new SqlParameter("@ID", SqlDbType.Int); 
ID.Direction = ParameterDirection.Output; 
Command.Parameters.Add(ID); 
Command.ExecuteNonQuery(); 
int NewID = (int)ID.Value; 
+0

क्या आप इसके बारे में निश्चित हैं? मैं DbCommand.ExecuteScalar() का उपयोग कर रहा हूं और यह नए रिकॉर्ड पहचान को ठीक करता है। यह सिर्फ एक अलग आदेश होने की जरूरत है, एक बैच नहीं। –

+2

SQL सर्वर कॉम्पैक्ट एडशन केवल प्रति कमान का एक कथन का समर्थन करता है। [लिंक] (http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/1d1d3267-dc29-470b-bb20-00487a39bc87/) – mariocase84

+1

इसके अलावा, ऐसा लगता है कि आपको "SELECT @@ पहचान चाहिए "उसी खुले कनेक्शन के खिलाफ जो आपने" INSERT "चलाया है। – Agent007

0

पाने के लिए एक उत्पादन पैरामीटर परिभाषित करना होगा।

public static long GetIdentity(this IDbConnection connection) 
{ 
    var cmd = connection.CreateCommand(); 
    cmd.CommandText = "SELECT @@IDENTITY"; 
    cmd.CommandType = CommandType.Text; 
    var id = cmd.ExecuteScalar(); 
    return (long)(decimal)id; 
} 

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

  • कोई संबंधित समस्या नहीं^_^