尝试更新数据库时SqlExeption [英] SqlExeption when trying to update database

查看:70
本文介绍了尝试更新数据库时SqlExeption的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,



当我想更新我的数据库时,我收到以下SqlExeption:



子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。



这是我在C#文件中的代码:

Hello,

When I want to update my database I recieve following SqlExeption:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Here is my code in the C# file:

DbParameters parameters = new DbParameters();
           parameters.Add("apName", apName, DbType.String);
           parameters.Add("apDescription", apDescription, DbType.String);
           parameters.Add("apID", apId.ToString(), DbType.Int32);
           parameters.Add("apBusinessCritical", apBusinessCritical.ToString(), DbType.Boolean);
           parameters.Add("apApplicationSupport", ApplicationSupport.ToString(), DbType.Int32);
           parameters.Add("apApplicationSupport2", ApplicationSupport2.ToString(), DbType.Int32);
           parameters.Add("apApplicationSupport3", ApplicationSupport3.ToString(), DbType.Int32);
           parameters.Add("apRemark", "", DbType.String);
           parameters.Add("ApplManagerPersonalNo", ApplManagerPersonalNo.ToString(), DbType.Int32);
           parameters.Add("ApplOwnerPersonalNo", ApplOwnerPersonalNo.ToString(), DbType.Int32);
           parameters.Add("apConsulting", apConsulting, DbType.String);
           parameters.Add("apOperation", apOperation, DbType.String);
           parameters.Add("apSLAIntern", apSLAIntern, DbType.String);
           parameters.Add("apSLAExtern", apSLAExtern, DbType.String);
           parameters.Add("apPlattform", apPlattform, DbType.String);
           parameters.Add("apDesign", apDesign, DbType.String);
           parameters.Add("apDevImp", apDevImp, DbType.String);
           parameters.Add("apTraining", apTraining.ToString(), DbType.Boolean);
           parameters.Add("apLieferant", apLieferant, DbType.String);
           parameters.Add("apBetriebszeit", apBetriebszeit, DbType.String);
           parameters.Add("apKPI", apKPI.ToString(), DbType.Boolean);

           this._dbAppOverview.Open("sp_UpdateApplication", parameters);





这是我的存储过程:



And here is my Stored Procedure:

USE [Application_Overview]
GO
/****** Object:  StoredProcedure [dbo].[sp_UpdateApplication]    Script Date: 02/12/2013 10:17:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Leonard Krähenbühl
-- Create date: 02.03.2011
-- Used In:		ApplicationOverview.applDetailView.aspx
-- =============================================
ALTER PROCEDURE [dbo].[sp_UpdateApplication]
	
	@apID					int				= 0	,
	@apName					nvarchar(50)		,
	@apDescription			nvarchar(4000)		,
	@apBusinessCritical		bit					,
	@apApplicationSupport	int					,
	@apApplicationSupport2	int					,
	@apApplicationSupport3	int					,
	@ApplManagerPersonalNo  nvarchar(10)		,
	@apRemark				nvarchar(4000)		,
	@ApplOwnerPersonalNo	nvarchar(10)		,
	@apConsulting			nvarchar(4000)		,
	@apOperation			nvarchar(4000)		,
	@apSLAIntern			nvarchar(4000)		,
	@apSLAExtern			nvarchar(4000)		,
	@apPlattform			nvarchar(25)		,	
	@apDesign				nvarchar(4000)		,
	@apDevImp				nvarchar(4000)		,
	@apTraining				bit					,
	@apLieferant			nvarchar(4000)		,
	@apBetriebszeit			nvarchar(4000)		,
	@apKPI					bit					

AS
BEGIN
	DECLARE @usIDOwner int
	DECLARE @usIDManager int

	SET @usIDOwner = (SELECT usID FROM tblUser WHERE usPersonalNo = CAST(@ApplOwnerPersonalNo AS int))
	
	IF isnull(@usIDOwner, 0) = 0 OR @usIDOwner = 0
	BEGIN
		INSERT INTO dbo.tblUser(usPersonalNo)
		VALUES		(@ApplOwnerPersonalNo)
		 
		SET @usIDOwner = (SELECT usID FROM tblUser WHERE usPersonalNo = CAST(@ApplOwnerPersonalNo AS int))
		
	END

	SET @usIDManager = (SELECT usID FROM tblUser WHERE usPersonalNo = CAST(@ApplManagerPersonalNo AS int))

	IF isnull(@usIDManager, 0) = 0 OR @usIDManager = 0
	BEGIN
		INSERT INTO dbo.tblUser(usPersonalNo)
		VALUES		(@ApplManagerPersonalNo)

		SET @usIDManager = (SELECT usID FROM tblUser WHERE usPersonalNo = CAST(@ApplManagerPersonalNo AS int))
	END

	UPDATE	dbo.tblApplications 
	SET		apName = @apName, apDescription = @apDescription, apBusinessCritical = @apBusinessCritical,
			apApplicationSupport = @apApplicationSupport, apAppSupport2 = @apApplicationSupport2, apAppSupport3 = @apApplicationSupport3,
			apApplManagerUsID = @usIDManager, apSLAIntern = @apSLAIntern, apSLAExtern = @apSLAExtern,
			apOwnerUsID = @usIDOwner, apRemark = @apRemark, apConsulting = @apConsulting, apOperation = @apOperation,
			apPlattform = @apPlattform, apDesign = @apDesign, apDevImp = @apDevImp, apTraining = @apTraining,
			apLieferant = @apLieferant, apBetriebszeit = @apBetriebszeit, apKPI = @apKPI
	WHERE	(apID = @apID)
END





有人知道错误的来源吗?



感谢您的支持。



Does somebody know where the error is coming from?

Thanks for the support.

推荐答案

当你使用子查询时,它应该返回一个值来进行赋值。



when you use subquery it should return a single value for assignment.

SELECT usID FROM tblUser







更新这些块






update these chunks with

SELECT top 1 usID FROM tblUser


这篇关于尝试更新数据库时SqlExeption的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆