我試圖將數據表傳遞給存儲過程。該表具有四列OldDifficulty
,OldIndex
,NewDifficulty
和NewIndex
。它被傳遞給一個存儲過程,該存儲過程應該更新Puzzles
表中的所有行,將具有舊索引和難度的行更改爲其新索引和難度。 Puzzles
表不會更改,我無法弄清楚原因。我不確定問題出在代碼中還是數據庫查詢中。存儲過程不更新數據
這裏是調用存儲過程的C#代碼:
var Form = context.Request.Form;
DataTable table = new DataTable();
table.Columns.Add("OldDifficulty");
table.Columns.Add("OldIndex");
table.Columns.Add("NewDifficulty");
table.Columns.Add("NewIndex");
foreach (var key in Form.Keys)
{
var Old = key.ToString().Split('_');
var New = Form[key.ToString()].Split('_');
if (Old == New || New.Length == 1 || Old.Length == 1) continue;
table.Rows.Add(Old[0], int.Parse(Old[1]), New[0], int.Parse(New[1]));
}
using (var con = new SqlConnection(SqlHelper.ConnectionString))
{
con.Open();
using (var com = new SqlCommand("RearrangePuzzles", con))
{
com.CommandType = CommandType.StoredProcedure;
com.Parameters.Add(new SqlParameter("ChangedPuzzles", table)
{ SqlDbType = SqlDbType.Structured });
com.ExecuteNonQuery();
}
con.Close();
}
,這裏是存儲過程:
ALTER PROCEDURE [dbo].[RearrangePuzzles]
@ChangedPuzzles ChangedPuzzlesTable READONLY
AS
UPDATE p
SET
NthPuzzle = cp.NewIndex,
Difficulty = cp.NewDifficulty
FROM
Puzzles p JOIN
@ChangedPuzzles cp ON cp.OldIndex = p.NthPuzzle AND cp.OldDifficulty = p.Difficulty
你有什麼想法,爲什麼表中沒有更新?我的SQL有什麼問題嗎?
什麼是你的sqlserver版本? – Illuminati
com.Parameters.Add(new SqlParameter(「ChangedPuzzles」,table)=> com.Parameters.Add(new SqlParameter(「@ ChangedPuzzles」,table) - 也可以是這個,但它會有助於知道在得出結論之前確切的錯誤。 – Illuminati