2016-11-14 125 views
1

我將存儲過程移動到C#代碼。 在存儲過程中我有一些像在C#中使用SQL關鍵字MySqlCommand.CommandText

Begin 
SET @Id = null; 
IF ?Status = 0 THEN SET ? ?DateToday = UTC_TIMESTAMP(); END IF; 
SELECT * FROM TABLE 
END 

在我只是複製粘貼裏面的一切的開始和結束的C#代碼。像這樣,

MySqlCommand command = new MySqlCommand(); 
command.CommandText = @"SET @Id = null; 
IF ?Status = 0 THEN SET ? ?DateToday = UTC_TIMESTAMP(); END IF; 
SELECT * FROM TABLE" 

我在如果聲明說,不正確的語法錯誤。存儲過程正在工作,但不是當我把它放在C#代碼中。

+0

爲什麼不使用command.CommandText =「SELECT * FROM TABLE」 – Damith

+0

您的存儲過程是否有參數? –

+0

@達到它的一個例子,Set和If語句導致錯誤。 – Cosytyle

回答

0

如果你已經創建了一個存儲過程,那麼你可以使用這樣的存儲過程語法來調用它;

using (SqlConnection con = new SqlConnection(someconnectionstring)) { 
    using (SqlCommand cmd = new SqlCommand("myStoredProc", con)) { 
     cmd.CommandType = CommandType.StoredProcedure; 
     //If you have parameters in your SP, add like this else ignore below line 
     cmd.Parameters.Add("@myparam", SqlDbType.VarChar).Value = somevalue; 

     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
    } 
+0

@Cosytyle; - 做任何具體的理由。由於這不是一個好的編碼習慣? –

1

這不是存儲過程的邏輯。顧名思義,存儲過程是存儲在數據庫本身中的函數。你可以通過調用他們的名字來調用它們。

因此,您不能只將存儲過程函數代碼放入您的C#代碼中,我的意思是您不應該這樣做。

更新: 如果你只想使用T-SQL語句(if-else塊等),看看這個link

+0

我明白了,但是C#CommandText中Set和If語句的對應關係是什麼?btw感謝您的回覆:) – Cosytyle

+0

不客氣。更新了答案。 –