2013-05-31 39 views
0
CreateConnectionString(); 
SqlCommand cmd = sqlConnection.CreateCommand(); 
cmd.CommandType = System.Data.CommandType.StoredProcedure; 
cmd.CommandText = "[MURL_InsertTokens]"; 

SqlParameter ParameterTokenID = new SqlParameter(); 
ParameterTokenID.ParameterName = "@TokenID"; 
ParameterTokenID.SqlDbType = System.Data.SqlDbType.Int; 
ParameterTokenID.Direction = ParameterDirection.Input; 
ParameterTokenID.Value = token; 
cmd.Parameters.Add(ParameterTokenID); 

SqlParameter ParameterToken = new SqlParameter(); 
ParameterToken.ParameterName = "@Token"; 
ParameterToken.SqlDbType = System.Data.SqlDbType.NVarChar; 
ParameterToken.Direction = ParameterDirection.Input; 
ParameterToken.Value = token; 
cmd.Parameters.Add(ParameterToken); 

return true; 

存儲過程:數據沒有得到插入SQL服務器

ALTER PROCEDURE [dbo].[MURL_InsertTokens] 
    @TokenID int , 
    @Token nvarchar(MAX) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    IF EXISTS (SELECT * FROM Tokens) 
     BEGIN 
      UPDATE Tokens SET Tokens = @Token WHERE TokenID = @TokenID 
     END 
    ELSE 
     BEGIN 
      INSERT INTO Tokens(Tokens) VALUES (@Token) 
     END 
END 

它返回true,但我的數據是沒有得到插入,我不知道爲什麼。

+0

你的**連接字符串**看起來像什麼? –

+0

顯示創建並打開連接並將連接分配給命令的Connection屬性的代碼。 – Tim

回答

1

您是否在調用過程?

cmd.ExecuteNonQuery(); 
+0

仍然沒有發生不知道爲什麼 – vini

+0

@vini ConnectionString看起來像一個問題。它是否附加到SqlCommand對象?它打開了嗎? – LarsTech

2

你忘了檢查這裏

IF EXISTS (SELECT * FROM Tokens) 

的ID。如果至少有一個排在表中插入的部分將永遠不會觸發,只需將更新部分

你可能想

IF EXISTS (SELECT * FROM Tokens WHERE TokenID = @TokenID) 
+0

使用*會將所有數據帶到所有列。爲了滿足'IF Exists'而不是使用'IF EXISTS(SELECT 1 FROM Tokens WHERE TokenID = @TokenID)'這樣數據將只是一列,所有值都是1.這在SQLEngine上會更輕。 –

+2

@NikhilAgrawal:這個陳述是**明顯錯誤**。 'IF EXISTS()'內的'SELECT *'將**不檢索所有數據。 'IF EXISTS()'只是檢查數據的存在 - 它不檢索任何東西。在性能和執行計劃中使用'IF EXISTS(SELECT 1 ...)'和'IF EXISTS(SELECT * ...)'**是相同的** –

0

您的代碼段看起來並未實際執行您正在構建的操作。 Add:

cmd.ExecuteNonQuery(); 

要實際執行命令。

+1

我沒有調用'ExecuteDataReader'。我的代碼中有一個錯字。我打電話給'ExecuteNonReader',但是打算成爲'ExecuteNonQuery'。 –