int[] があり、それをパラメーターとしてプロシージャーに渡します。メソッドが呼び出されると、エラーは報告されませんが、データベースでは何も更新されません。ストアド プロシージャは別のプログラマによって記述されているため、Add() に何か問題がある可能性があります。このストアド プロシージャは変更できないため、すべてを Add() で解決する必要があります。
参考までに、Add() は userID の配列と groupID をパラメーターとして取り、それらをフォーマットして、ストアド プロシージャを実行します。ストアド プロシージャは、userID と groupID を DB に挿入します。
For example:
if userIDs=[1,2,3] and groupID=4,
then I want the following data to be inserted into the DB
userID groupID
1 4
2 4
3 4
ストアド プロシージャ
USE [xyz]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spSaveSomething]
@groupID INT,
@userIDs TEXT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @handle INT
EXEC sp_xml_preparedocument @handle OUTPUT, @userIDs
DELETE FROM tbl1 WHERE i_GroupID = @groupID AND i_NetworkUserID IN (SELECT [ID] FROM OPENXML (@handle, 'ROOT/VAL', 1) WITH ([ID] INT))
INSERT INTO tbl1 (i_NetworkUserID, i_GroupID)
SELECT [ID], @groupID FROM OPENXML (@handle, 'ROOT/VAL', 1) WITH ([ID] INT)
EXEC sp_xml_removedocument @handle
END
Add()
public void AddUsers(int[] UserIDs, int GroupID)
{
List<int> testList = new List<int>();
foreach (int id in UserIDs)
{
testList.Add(id);
}
XmlSerializer xs = new XmlSerializer(typeof(List<int>));
MemoryStream ms = new MemoryStream();
xs.Serialize(ms, testList);
string resultXML = UTF8Encoding.UTF8.GetString(ms.ToArray());
SqlParameter param1 = new SqlParameter("@userIDs", resultXML);
SqlParameter param2 = new SqlParameter("@groupID", GroupID);
context.Database.ExecuteSqlCommand("spSaveSomething @groupID, @userIDs",
param2, param1);
}