Member 8583441 Ответов: 2

Метод executenonquery sqlcommand, который бросает исключения System.invalidcast


я вставляю данные в базу данных из c# asp.net использование хранимой процедуры. Я использовал библиотеку классов доступа к данным для вставки данных, в которых в последний раз я получаю это упоминание об ошибке в вопросе при методе executenonquery. в этом методе значение также равно нулю. Я отправлю хранимую процедуру и библиотеку классов доступа к данным. пожалуйста, поправьте меня, где я делаю что-то не так

Что я уже пробовал:

хранимая процедура:
CREATE PROCEDURE [dbo].[usp_Student_InsertOrUpdateStudentDetails]
(
	@guidStudentId			UNIQUEIDENTIFIER,
	@chvStudentName			VARCHAR(50),
	@chvAccessLevel			VARCHAR(50),
	@dateEntryDate			DATETIME,
	@chvEmailAddress		VARCHAR(200),
	@chvPhone				VARCHAR(10),
	@chvPasswordHash		VARCHAR(MAX),
	@guidRegisterationsId	UNIQUEIDENTIFIER,
	@guidCreatedBy			UNIQUEIDENTIFIER,
	@dateCreatedDate		DATETIME,
	@chvOutMessage			VARCHAR(1000) OUTPUT
)
AS

BEGIN

	SET NOCOUNT ON;

		SET @guidStudentId = NEWID()
		SET @dateCreatedDate = CONVERT(varchar(10),GETDATE(),105)
		
		IF NOT EXISTS(SELECT '*' FROM Student where StudentId = @guidStudentId)
		BEGIN			

			INSERT INTO	Student(StudentId, StudentName, AccessLevel, EntryDate, EmailAddress, Phone, PasswordHash, RegisterationsId, CreatedBy, CreatedDate)
			VALUES (@guidStudentId, @chvStudentName, @chvAccessLevel, @dateEntryDate, @chvEmailAddress, @chvPhone, @chvPasswordHash, @guidRegisterationsId, @guidCreatedBy, @dateCreatedDate)
			
			SET @chvOutMessage = 'SUCCESS INSERTED INTO STUDENT TABLE'

			INSERT INTO Users(UserId,StudentId,UserName,Password,UserType,IsSuperUser,CreatedBy,CreatedDate)
			VALUES (NEWID(),@guidStudentId,@chvStudentName,@chvPasswordHash,@chvAccessLevel,'False',@guidCreatedBy,@dateCreatedDate)

			SET @chvOutMessage = 'SUCCESS INSERTED INTO USERS TABLE'
			
		END
		ELSE
		BEGIN

			UPDATE	Student SET
					ModifiedBy		= @guidStudentId,
					ModifiedDate	= @dateCreatedDate,
					IsActive	= 0
			WHERE	IsActive	= 1 
			AND		StudentId	= @guidStudentId

			SET @chvOutMessage = 'SUCCESSFULLY UPDATED STUDENT DETAILS'

			UPDATE	Users SET
					ModifiedBy		= @guidStudentId,
					ModifiedDate	= @dateCreatedDate					
			WHERE	StudentId	= @guidStudentId

			SET @chvOutMessage = 'SUCCESSFULLY UPDATED USERS DETAILS'

		END

END


Код библиотеки доступа к данным:
public StudentBO InsertOrUpdateStudentDetails(StudentBO objStudentBO)
        {
            SqlConnection con = new SqlConnection(DbBridge.DbConnection);

            try
            {
                con.Open();

                SqlCommand cmd = new SqlCommand(INSERT_OR_UPDATE_STUDENT_DETAILS, con)
                {
                    CommandType = CommandType.StoredProcedure
                };

                cmd.Parameters.AddWithValue("@guidStudentId", objStudentBO.StudentId);
                cmd.Parameters.AddWithValue("@chvStudentName", objStudentBO.StudentName);
                cmd.Parameters.AddWithValue("@chvAccessLevel", objStudentBO.AccessLevel);
                cmd.Parameters.AddWithValue("@dateEntryDate", objStudentBO.EntryDate);
                cmd.Parameters.AddWithValue("@chvEmailAddress", objStudentBO.EmailAddress);
                cmd.Parameters.AddWithValue("@chvPhone", objStudentBO.Phone);
                cmd.Parameters.AddWithValue("@chvPasswordHash", objStudentBO.PasswordHash);
                cmd.Parameters.AddWithValue("@guidRegisterationsId", objStudentBO.RegisterationsId);
                cmd.Parameters.AddWithValue("@guidCreatedBy", objStudentBO.CreatedBy);
                cmd.Parameters.AddWithValue("@dateCreatedDate", objStudentBO.CreatedDate);
                cmd.Parameters.AddWithValue("@chvOutMessage", OUTMESSAGE_SIZE);

                int k = cmd.ExecuteNonQuery();
                if (k == 1)
                    objStudentBO.OutMessage = cmd.Parameters["@chvOutMessage"].Value.ToString();
            }

            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
            }
            return objStudentBO;
        }

где private const string INSERT_OR_UPDATE_STUDENT_DETAILS = "usp_Students_InsertOrUpdateStudentsdetails";

Получение ошибки при int k = cmd.Метод executenonquery();

Member 8583441

StudentBO - это библиотека классов BusinessObject

Member 8583441

Я не могу найти точную ошибку, исходящую от средств system.invalidtypecast

summiya1

да, сравните ваши параметры с типами дат SQL. проверьте также параметры дат.

2 Ответов

Рейтинг:
0

ZurdoDev

Ошибка говорит вам, что вы пытаетесь сохранить один тип данных в неправильном типе переменной/поля. Например, вы пытаетесь сохранить строковое слово в переменной Int. Он не приводит должным образом к правильному типу.

Вам нужно будет отладить свой sql и посмотреть, что происходит. Я бы рекомендовал запустить Sql Profiler, чтобы увидеть точный sql, который отправляется.


Member 8583441

Я отладил sql запрос но не использовал тот же результат

ZurdoDev

Никто не может сделать это за тебя. Что-то в ваших данных не так, и вы должны найти это. Мы не можем управлять им для вас.

Начните с извлечения вещей из хранимой процедуры и упростите ее. С помощью процесса устранения вы можете найти именно то, что вызывает ошибку, а затем исправить ее. Но ты должен это сделать.

Member 8583441

Пожалуйста сделайте что нибудь сэр для меня

ZurdoDev

Как же так? Я не могу запустить ваш код. Что ты хочешь, чтобы мы сделали?

Member 8583441

то, что вы требуете от меня.... Я отдам его тебе.

ZurdoDev

К сожалению, нет. Я не собираюсь принимать копию вашего кода и БД.

На самом деле это не так уж и сложно. А отладка-это самый важный навык, которому вы можете научиться для разработки.

Начните комментировать части вашей хранимой процедуры и сузьте ее. Кроме того, ищите места, где вы храните данные в виде чисел или десятичных чисел, и проверяйте поступающие данные.

Member 8583441

Хорошо сэр спасибо за вашу любезную информацию

Рейтинг:
0

summiya1

проверьте наличие нулевого значения

string.IsNullOrEmpty(parameter)


Member 8583441

Где разместить эту строку

Member 8583441

Спасибо за решение, которое вы мне дали, чтобы проверить, являются ли параметры нулевыми или пустыми, но параметры не пусты, они имеют значения...