2009-08-24 9 views
6

मेरे पास सी # कोड है जो .sql फ़ाइलों के माध्यम से चक्र चलाता है और डेटाबेस को स्थापित करने के लिए उनके अंदर क्या निष्पादित करता है।सी #, MySQL, ADO.NET, डिलीमीटर कारण वाक्यविन्यास त्रुटि

DROP PROCEDURE IF EXISTS myProc; 

DELIMITER $$ 

CREATE PROCEDURE myProc() 
BEGIN 
-- procedure stuff goes here 
END $$ 

DELIMITER ; 

CALL myProc(); 

जब मैं इनपुट इस MySQL क्वेरी ब्राउज़र की स्क्रिप्ट विंडो में, यह पूरी तरह से चलाता है ... बार बार, बस एक यह चाहेगा के रूप में:

एक .sql फ़ाइल मूल रूप से इस प्रकार है।

हालांकि, अगर मैं अपने IDbCommand में स्ट्रिंग डाल दिया और यह अमल ...

connection.Open(); // An IDbConnection 
IDbTransaction transaction = connection.BeginTransaction(); 
using (IDbCommand cmd = connection.CreateCommand()) 
{ 
    cmd.Connection = connection; 
    cmd.Transaction = transaction; 
    cmd.CommandText = line; 
    cmd.CommandType = CommandType.Text; 

    try 
    { 
     cmd.ExecuteNonQuery(); 
    } 
    catch (SqlException ex) 
    { 
     transaction.Rollback(); 
     return false; 
    } 
} 

transaction.Commit(); 
connection.Close(); 

... मैं खतरनाक अपवाद 1064 ...

आप में एक त्रुटि है मिल आपका एसक्यूएल वाक्यविन्यास; मैनुअल कि सही वाक्य रचना के पास 'परिसीमक उपयोग करने के लिए $$ बनाएं प्रक्रिया myProc() शुरू करने के लिए अपने MySQL सर्वर संस्करण के लिए संगत की जाँच ...

तो, सवाल है ... क्यों MySQL जाने करता है मैं इसे बिना किसी समस्या के करता हूं, लेकिन जब मैं इसे सी # से चलाने की कोशिश करता हूं, तो यह विफल हो जाता है? और निश्चित रूप से दूसरा सवाल यह है कि मुझे इसे कैसे ठीक करना है।

उत्तर

0

अपनी स्क्रिप्ट में कमांड के कुछ mysqlk ग्राहक excutable bt व्याख्या कर रहे हैं एसक्यूएल सर्वर के लिए भेजे जाने से पहले।

mysql commands

देखें वास्तव में सभी सीमांकक

सी # से स्क्रिप्ट की व्याख्या करने के लिए आप कोड जानता है कि आदेश है लिखने के लिए होगा, तो आप सिर्फ आदेशों लाइन लाइन द्वारा सर्वर से पारित नहीं हो सकता ।

उदा। आप उस फ़ाइल में 3 आदेशों है और इतने ExecuteNonQuery केवल 3 बार

और paracycle के coment से आप MySqlScript वर्ग

6

एक त्वरित टुकड़ा की तलाश में उन लोगों के लिए उपयोग करने की आवश्यकता कॉल करना चाहते हैं ...

var connectionString = @"server=ChangeMe;user=ChangeMe;pwd=ChangeMe;database=ChangeMe;"; 

var scriptText = File.ReadAllText(@"C:\script.sql"); 

using (var connection = new MySqlConnection(connectionString)) 
{ 
    var script = new MySqlScript(connection, scriptText); 
    connection.Open(); 
    script.Execute(); 
} 
संबंधित मुद्दे