Это мой код хранимой процедурыТип ошибки преобразования данных VARCHAR в INT
ALTER procedure [Proc_Add_User]
(@UserId varchar(20),
@UserName varchar(100),
@Page_Name varchar(20),
@AccessIndicator int,
@CreatedBy varchar(50),
@returnStatus varchar(50) output)
as
DECLARE @intErrorCode INT
DECLARE @Page_Indicator INT
begin
BEGIN TRAN
Set @Page_Indicator = (select Page_Indicator from Pages where [email protected]_Name);
if (select count(*) from Users where [email protected] and [email protected]) > 0 begin
if (select count(*) from User_Credentials where [email protected]_Indicator and
[email protected] ) > 0
set @returnStatus='User already has access'
else
insert into User_Credentials(UserId,Page_Indicator,Access_Indicator,CreatedBy)
values (@UserId,@Page_Indicator,@AccessIndicator,@CreatedBy)
SELECT @intErrorCode = @@ERROR
IF (@intErrorCode <> 0) GOTO PROBLEM
end
else begin
insert into Users(UserId,UserName,CreatedBy)
values(@UserId,@UserName,@CreatedBy)
SELECT @intErrorCode = @@ERROR
IF (@intErrorCode <> 0) GOTO PROBLEM
insert into User_Credentials(UserId,Page_Indicator,Access_Indicator,CreatedBy)
values (@UserId,@Page_Indicator,@AccessIndicator,@CreatedBy)
SELECT @intErrorCode = @@ERROR
IF (@intErrorCode <> 0) GOTO PROBLEM
end
COMMIT TRAN
if(@returnStatus is null)
set @returnStatus='Success';
PROBLEM:
IF (@intErrorCode <> 0) BEGIN
set @returnStatus= 'Unexpected error occurred!'
ROLLBACK TRAN
end
end
И я называю это из кода вставленного ниже:
Con.Open();
cmd = new OleDbCommand();
cmd.Connection = Con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Proc_Add_User";
cmd.Parameters.Clear();
cmd.Parameters.Add("@UserId", SqlDbType.VarChar).Value = userLanId;
cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = userName;
cmd.Parameters.Add("@Page_Name", SqlDbType.VarChar).Value = pageName;
cmd.Parameters.Add("@AccessIndicator", SqlDbType.Int).Value = accessIndicator;
cmd.Parameters.Add("@CreatedBy", SqlDbType.VarChar).Value = createdBy;
OleDbParameter output = new OleDbParameter("@returnStatus", SqlDbType.VarChar);
output.Direction = ParameterDirection.Output;
cmd.Parameters.Add(output);
int result = cmd.ExecuteNonQuery();
Я получаю ошибку, упомянутый в ExecuteNonQuery
заявление. Что меня смущает, я могу выполнить хранимую процедуру в SSMS, но не из моего приложения (front-end). Я также предоставил те же значения, но это не удается из моего приложения.
Я проверил дважды, чтобы убедиться, что порядок параметров согласован и один и тот же тип данных, но все же он вызывает эту ошибку. Я могу вставить свой хранимый код proc здесь, если захочет, так что дайте мне знать ... Спасибо заранее!
EDIT
OOPS! Я просто понял, что все вставки все происходят, и в базе данных все исправлено. Именно эта ошибка попадает в блок catch в моем приложении. Есть идеи?
Я не могу игнорировать его, потому что на основе возвращаемого значения ExecuteNonQuery() у меня есть некоторые утверждения, а также он не проходит через код, присутствующий после ExecuteNonQuery().
Жесткий, чтобы помочь, если ваш код говорит что-то другое, чем 'мой код here'. –
Какой тип данных является 'accessIndicator' в коде? Возможно, вы попытаетесь преобразовать 'string' в' int' и провалиться. –
Действительно ли UserID a VARCHAR? – Steve