@@ -98,8 +98,16 @@ public async Task<string> RenderToHtml(string layoutJson, Dictionary<string, obj
9898 var sourceType = ds . TryGetProperty ( "sourceType" , out var stEl ) ? stEl . GetString ( ) ?? "" : "" ;
9999 var sourceRef = ds . TryGetProperty ( "sourceRef" , out var srEl ) ? srEl . GetString ( ) ?? "" : "" ;
100100 var customSql = ds . TryGetProperty ( "customSql" , out var csEl ) ? csEl . GetString ( ) ?? "" : "" ;
101+ var dataSourceId = ds . TryGetProperty ( "dataSourceId" , out var dsi )
102+ ? dsi . ValueKind switch
103+ {
104+ JsonValueKind . Number => dsi . GetInt64 ( ) ,
105+ JsonValueKind . String when long . TryParse ( dsi . GetString ( ) , out var v ) => v ,
106+ _ => 0
107+ }
108+ : 0 ;
101109
102- var dt = await ResolveSource ( sourceType , sourceRef , customSql , queryParams ) ;
110+ var dt = await ResolveSource ( sourceType , sourceRef , customSql , dataSourceId , queryParams ) ;
103111 if ( dt != null ) datasets [ id ] = dt ;
104112 }
105113 }
@@ -333,7 +341,7 @@ public byte[] ExportPdf(string layoutJson, Dictionary<string, object?>? queryPar
333341 // ===== Data Source Helpers =====
334342
335343 private async Task < DataTable ? > ResolveSource ( string sourceType , string sourceRef , string customSql ,
336- Dictionary < string , object ? > ? queryParams )
344+ long dataSourceId , Dictionary < string , object ? > ? queryParams )
337345 {
338346 switch ( sourceType )
339347 {
@@ -348,10 +356,12 @@ public byte[] ExportPdf(string layoutJson, Dictionary<string, object?>? queryPar
348356 case "sql" :
349357 if ( ! string . IsNullOrEmpty ( customSql ) )
350358 {
351- // 使用第一个数据源执行自定义SQL
352- var firstDs = await _db . DataSources . FirstOrDefaultAsync ( d => d . Deleted == 0 ) ;
353- if ( firstDs != null )
354- return await ExecuteQuery ( firstDs . Id , customSql , queryParams ) ;
359+ // 优先使用数据集保存的数据源;旧数据未保存 dataSourceId 时回退到第一个数据源
360+ var dsEntity = dataSourceId > 0
361+ ? await _db . DataSources . FirstOrDefaultAsync ( d => d . Deleted == 0 && d . Id == dataSourceId )
362+ : await _db . DataSources . FirstOrDefaultAsync ( d => d . Deleted == 0 ) ;
363+ if ( dsEntity != null )
364+ return await ExecuteQuery ( dsEntity . Id , customSql , queryParams ) ;
355365 }
356366 break ;
357367 }
0 commit comments