我想從多個表中計數記錄並將結果返回給輸出參數,以便我可以在Visual Studio C#中使用它們。計數SQL Server記錄並通過輸出參數返回結果
下面是T-SQL和C#代碼:
T-SQL代碼:
ALTER PROCEDURE CountRecordsForUpdates
@AreaOfLaw AS numeric OUTPUT,
@SubjectMatter AS numeric OUTPUT,
@Principles AS numeric OUTPUT,
@Judges AS numeric OUTPUT,
@Courts AS numeric OUTPUT
AS
DECLARE @AreaOfLawOut AS numeric
DECLARE @SubjectMatterOut AS numeric
DECLARE @PrinciplesOut AS numeric
DECLARE @JudgesOut AS numeric
DECLARE @CourtsOut AS numeric
DECLARE @CasesOut AS numeric
DECLARE @ReportsOut AS numeric
DECLARE @IssuesDiscussedOut AS numeric
--DECLARE @Judgement AS numeric
BEGIN
SET NOCOUNT ON;
SELECT @AreaOfLawOut = COUNT(AoLId) FROM [dbo].[CLR.AreaOfLaw] OUTPUT
SELECT @SubjectMatterOut = COUNT(SMId) FROM [dbo].[CLR.SubjectMatter] OUTPUT
SELECT @PrinciplesOut = COUNT(PId) FROM [dbo].[CLR.Principle] OUTPUT
SELECT @JudgesOut = COUNT(JId) FROM LocalJudgesView OUTPUT
SELECT @CourtsOut = COUNT(CourtId) FROM LocalCourtView OUTPUT
SELECT @CasesOut = COUNT(CaseId) FROM LocalReportedCaseView OUTPUT
SELECT @ReportsOut = COUNT(ReportId) FROM LocalReportView OUTPUT
SELECT @IssuesDiscussedOut = COUNT(IDId) FROM CLR_IssuesDiscussedView OUTPUT
END
GO
C#代碼:
try
{
decimal aol = 0, sm = 0, p = 0, judge = 0, court = 0;
using (SqlConnection sqlConnection = new SqlConnection(DataSources.RemoteConnectionString()))
{
sqlConnection.Open();
using (SqlCommand sqlCommand = new SqlCommand("[DB7934_businessmind].[CountRecordsForUpdates]", sqlConnection))
{
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
SqlParameter aolParam = new SqlParameter("@AreaOfLaw", aol) { Direction = System.Data.ParameterDirection.Output };
sqlCommand.Parameters.Add(aolParam);
SqlParameter smParam = new SqlParameter("@SubjectMatter", sm) { Direction = System.Data.ParameterDirection.Output };
sqlCommand.Parameters.Add(smParam);
SqlParameter pParam = new SqlParameter("@Principles", p) { Direction = System.Data.ParameterDirection.Output };
sqlCommand.Parameters.Add(pParam);
SqlParameter judgeParam = new SqlParameter("@Judges", judge) { Direction = System.Data.ParameterDirection.Output };
sqlCommand.Parameters.Add(judgeParam);
SqlParameter courtParam = new SqlParameter("@Courts", court) { Direction = System.Data.ParameterDirection.Output };
sqlCommand.Parameters.Add(courtParam);
sqlCommand.ExecuteNonQuery();
sqlCommand.Dispose();
AoLRemoteCount = Convert.ToDecimal(aolParam.Value);
SMRemoteCount = Convert.ToDecimal(smParam.Value);
PRemoteCount = Convert.ToDecimal(pParam.Value);
CourtRemoteCount = Convert.ToDecimal(courtParam.Value);
JRemoteCount = Convert.ToDecimal(judgeParam.Value);
}
sqlConnection.Close();
}
}
catch(Exception ex)
{
MessageBox.Show("An error has occurred while counting cloud records, the original error is: "
+ ex.Message, "Cloud Records", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
當我運行代碼,我得到以下錯誤消息:
對象不能從DBNULL轉換到其他類型。
我嘗試了所有我能想到的,但無濟於事。我需要幫助。我能夠一一統計他們,但這意味着我必須每次打電話給互聯網上的數據庫,我認爲這不利於流量。
我想要的就是一次性我能夠統計大約6個表中的所有記錄並返回值,以便我可以將它們分配給c#中的屬性以備將來使用。
所以調試一下,看看在哪一行發生。在檢查爲什麼這是DbNull之後,你是否期望它是,如果這是預期的行爲檢查'if(yourValue!= DbNull)'做的東西。如果不檢查爲什麼發生這種情況 – mybirthname
在您的存儲過程中,您永遠不會分配'@ AreaOfLaw',而是分配'@ AreaOfLawOut',這就是值返回爲null的原因。 – stuartd
錯誤發生在ExecuteNonQuery上。好吧,我會繼續嘗試。你是說我應該使用AreaOfLawOut代替C#代碼中的AreaOfLaw? – Ubeidatu