2016-09-06 60 views
0

我有一個存儲過程有兩個輸出參數在MySQL的測試1「和test2' 的正在運行的服務器5.6爲什麼ODBC C#在MySQL中的存儲過程中使用OUT參數時返回空字符串?

CREATE PROCEDURE `test_procedure`(OUT test1 varchar(20),OUT test2 int) 
    BEGIN 
    SET test1 = 'testing variable 1'; 
    SET test2 = 3; 
    END 

我有我的計算機上安裝ODBC驅動程序5.3。我使用下面的代碼綁定的參數,並獲得產值:

OdbcCommand cmdTest = new OdbcCommand(); 
    cmdTest.Connection = this.conn; 
    cmdTest.CommandText = "{call test.test_procedure (?, ?)}"; 

    cmdTest.Parameters.Add(@"test1", OdbcType.VarChar, 20).Direction = ParameterDirection.Output; 
    cmdTest.Parameters.Add(@"test2", OdbcType.Int).Direction = ParameterDirection.Output; 

    cmdTest.CommandType = CommandType.StoredProcedure; 
    using (OdbcDataReader returnRead = cmdTest.ExecuteReader()) 
    { 
    while (returnRead.Read()) 
    { 
     //Do something 
    } 
    } 

    string test1 = cmdTest.Parameters[0].Value.ToString(); 
    string test2 = cmdTest.Parameters[1].Value.ToString(); 

然而,在C#代碼串test1test2值作爲空字符串返回。我怎樣才能獲得我在存儲過程中設置的值?

我也試過ExecuteNonQuery(),但它給出了相同的結果。我知道我已連接到數據庫,因爲我能夠使用SELECTINSERTExecuteReader()

+1

你需要使用RETURN或SELECT test1,test2 –

+0

@Shannon我以爲MySQL不允許RETURN。如果我使用SELECT test1,test2那麼我需要一個OUT參數嗎? – CoderBapu

+0

不能 - 在MySQL中返回很好:https://www.techonthenet.com/mysql/loops/return.php –

回答

1

有使用OUT在C#中使用MySQL ODBC參數的一些問題,但它使用選擇的程序結束對我的作品:

CREATE PROCEDURE `test_procedure`() 
BEGIN 
    DECLARE test1 varchar(50); 
    DECLARE test2 int; 

    SET test1 = 'testing variable 1'; 
    SET test2 = 3; 

    SELECT test1,test2; 
END $$ 

和C#代碼:

OdbcCommand cmdTest = new OdbcCommand(); 
cmdTest.Connection = MyConnection; 
cmdTest.CommandText = "call test.test_procedure()"; 

using (OdbcDataReader returnRead = cmdTest.ExecuteReader()) 
{ 
    while (returnRead.Read()) 
    { 
     string test1 = returnRead.GetString(0); //'testing variable 1' 
     int test2 = returnRead.GetInt32(1); //3 
     //Do something 
    } 
} 
+0

謝謝,我不知道'GetString'和'GetInt32'方法。如果我必須返回一個結果集以及兩個out變量,那麼我是否必須用'test1','test2'和結果集'選擇'完整的外連接? – CoderBapu

+0

是的,你可以添加更多的列:),或使用連接等完整選擇。 –

相關問題