[英]Missing select before call from stored procedure
我在相同的存儲過程中有兩個選擇
SELECT
FORMAT(AVG([DC].[ContractedAmount]) , '$###,###,###,###.##') AS [AverageContractedAmount],
FORMAT(MAX([DC].[ContractedAmount]) , '$###,###,###,###.##') AS [MaxContractedAmount],
FORMAT(MIN([DC].[ContractedAmount]) , '$###,###,###,###.##') AS [MinContractedAmount],
COUNT([DC].[ContractedAmount]) AS [TotalProjects]
FROM
[DesignCustomer] AS [DC]
INNER JOIN
[Design] AS [D] ON [DC].[DesignKey] = [D].[DesignKey]
INNER JOIN
[Task] AS [T] ON [D].[DesignKey] = [t].[DesignKey]
INNER JOIN
[ProjectDesign] AS [PD] ON [D].[DesignKey] = [PD].[DesignKey]
INNER JOIN
[Project] AS [P] ON [PD].[ProjectKey] = [P].[ProjectKey]
INNER JOIN
[Address] AS [A] ON [A].[AddressGuid] = [P].[ProjectGuid]
WHERE ...
SELECT
CONCAT([P].[LegacyKey] , ' ' , [P].[Name]) AS [Project],
CONCAT([D].[Name] , ' ' , [DT].[Abbreviation] , ' ' , [D].[DesignNumber]) AS [Design],
FORMAT([DC].[ContractedAmount] , '$###,###,###,###.##') AS [Amount],
[P].[NumberOfUnits] AS [Units]
FROM
[DesignCustomer] AS [DC]
INNER JOIN
[Design] AS [D] ON [DC].[DesignKey] = [D].[DesignKey]
INNER JOIN
[DesignType] AS [DT] ON [D].[DesignTypeGuid] = [DT].[DesignTypeGuid]
INNER JOIN
[Task] AS [T] ON [D].[DesignKey] = [t].[DesignKey]
INNER JOIN
[ProjectDesign] AS [PD] ON [D].[DesignKey] = [PD].[DesignKey]
INNER JOIN
[Project] AS [P] ON [PD].[ProjectKey] = [P].[ProjectKey]
INNER JOIN
[Address] AS [A] ON [A].[AddressGuid] = [P].[ProjectGuid]
WHERE ...
我進入C#到Datatable中是:
public DataTable ExeSQLEstimate(string sprocName, parameters... )
{
SqlCommand cmd = new SqlCommand(sprocName, this.dbconn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MinWoodStories", SqlDbType.Int).Value = minWoodStories;
//etc
DataTable tbl = new DataTable("Table1")
{
Locale = System.Globalization.CultureInfo.InvariantCulture
};
SqlDataAdapter da = new SqlDataAdapter(cmd);
try
{
da.Fill(tbl);
}
catch (SqlException e)
{
this.HandleSQLError(e, "GetTableBySQL", sprocName);
}
finally
{
cmd.Dispose();
}
return tbl;
}
但由於某種原因,我只能得到一行(第一次選擇),而不是兩行(每次選擇一個)
為什么只返回一行? 問候
您的過程返回多個結果集,每個結果集將存儲在單獨的DataTable中。 您要填充數據集而不是數據表。 然后,您的數據集將具有2個數據表,其中包含過程的結果,您可以索引到DataSet.DataTables
屬性中以訪問數據。
這是一個簡單的示例, p_MultipleResultsProc
返回2個結果集,例如您的過程:
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))
using (SqlCommand cmd = new SqlCommand("EXEC p_MultipleResultsProc", conn))
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(ds);
}
執行后, ds
將包含2個DataTable,每個DataTable包含過程調用中不同的結果集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.