我将数据表传递给存储过程(使用表类型)以一次更新多条记录。SQL profiler 显示存储过程的执行和记录的更新;但是,我还将数据集返回到 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 Profiler 收到的内容。当我执行这个时,我得到至少 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