0

一度に複数のレコードを更新するために、(テーブル型を使用して) ストアド プロシージャにデータ テーブルを渡しています。SQL プロファイラーは、実行中のストアド プロシージャを示し、レコードが更新されます。ただし、データ セットを SqlDataAdapter にも返しています。これを SSMS で実行すると、結果が得られます。これをコードで実行すると、行が受信されません。

何か案は?SqlDataAdapter が満たされていない理由がわかりません。奇妙なことに、テーブルの数を取得できますが、どのテーブルの行も取得できません。

CREATE PROCEDURE [dbo].[SGT_UpdateSGT]
 @SGT_GuidelinesTbl As [dbo].[SGT_GuidelinesTbl] Readonly
AS
BEGIN
 SET NOCOUNT ON;
 update g set Disposition=sgt.Disposition, DispositionDate=GETDATE() from SGTGuidelineRequests g inner join @SGT_GuidelinesTbl sgt on g.pkid=sgt.pkid

 select u.ForeName, u.Email, g.* 
 from @SGT_GuidelinesTbl sgt
 inner join SGTGuidelineRequests g on g.pkid=sgt.pkid
 inner join Users u on u.NBID=g.SubmittedBy
END
GO

c# コード。セッションは埋まっています

DataSet dataSet = new DataSet();
DataTable queue = (DataTable)Session["SGTKeepDeleteQueue"];
using (SqlConnection sqlConnection = new SqlConnection(SQLConn.CWFMO()))
{
  sqlConnection.Open();
  SqlCommand sqlCommand = new SqlCommand("SGT_UpdateSGT", sqlConnection);
  sqlCommand.CommandType = CommandType.StoredProcedure;

  SqlParameter guidelinesTblParam = new SqlParameter();
  guidelinesTblParam.ParameterName = "@SGT_GuidelinesTbl";
  guidelinesTblParam.SqlDbType = SqlDbType.Structured;
  guidelinesTblParam.Value = queue;
  sqlCommand.Parameters.Add(guidelinesTblParam);

  SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
  sqlDataAdapter.Fill(dataSet);
}

そして、これが SQL プロファイラーが受け取るものです。これを実行すると、少なくとも 1 行のデータが取得されます。

declare @p1 dbo.SGT_GuidelinesTbl
insert into @p1 values(1,N'Approved',N'8/23/2012 12:00:00 AM')

exec SGT_UpdateSGT @SGT_GuidelinesTbl=@p1
4

1 に答える 1

1

SqlDataAdapterの名前を変更しましたが、機能します。理由はわかりませんが、ファイル内の他の場所に名前を付けていません。溶液を洗浄してもこれは解決しませんでした。少なくともそれは機能します。

提案と反対票をありがとう。

于 2012-08-23T21:50:30.830 に答える