RajkumarGnanaraj Ответов: 1

Ошибка преобразования значения varchar к int при получении вывода от storeprocedure?


Мой код
Dim connectionString As String = ConfigurationManager.ConnectionStrings("ConString").ConnectionString
       Dim conn As New SqlConnection(connectionString)
       Dim cmd As New SqlCommand(query, conn)
       cmd.CommandType = CommandType.StoredProcedure
       cmd.Parameters.AddWithValue("@fName", txtFirstName.Text)
       cmd.Parameters.AddWithValue("@Lname", txtLName.Text)
       cmd.Parameters.AddWithValue("@Sex", CBSex.SelectedItem.ToString)
       cmd.Parameters.AddWithValue("@DOB", Convert.ToDateTime(DTDOB.Text))
       cmd.Parameters.AddWithValue("@Age", txtAge.Text)
       cmd.Parameters.AddWithValue("@Address", txtAddress.Text)
       cmd.Parameters.AddWithValue("@phno", txtPhNo.Text)
       cmd.Parameters.AddWithValue("@Email", txtEmail.Text)
       cmd.Parameters.AddWithValue("@IdNo", txtIDNo.Text)
       cmd.Parameters.AddWithValue("@contactPerson", txtContactPerson.Text)
       cmd.Parameters.AddWithValue("@Relation", txtRelation.Text)
       cmd.Parameters.AddWithValue("@claimid", SqlDbType.VarChar)
       cmd.Parameters("@claimid").Direction = ParameterDirection.Output
       cmd.Parameters.AddWithValue("@cpPhno", txtCPPhno.Text)
       cmd.Parameters.AddWithValue("@Photo", profilepicture)
       cmd.Parameters.AddWithValue("@ID", idorpassport)
       Dim a As Integer
       conn.Open()
       a = cmd.ExecuteNonQuery()
       If a > 0 Then
           MessageBox.Show("Data Added successfully and your clientID is :" & cmd.Parameters("@claimid").Value.ToString())
       Else
           MessageBox.Show("Please try Again")
       End If

Моя storedprocedure
@fName varchar(50),
@Lname Varchar(50),
@Sex  varchar(2),
@DOB date,
@Age int,
@Address varchar(500),
@phno varchar(15),
@Email Varchar(100),
@IdNo varchar(30),
@contactPerson varchar(50),
@Relation Varchar(50),
@claimid varchar(30)output,
@cpPhno varchar(15),
@Photo image,
@ID image
AS
BEGIN
if @Sex='Male' 
begin
set @Sex='M'
end
if @Sex='Female' 
begin
set @Sex='F'
end

	insert into Client(FirstName,LastName,Sex,DOB,Age,[Address],PhNo,email,[IDCard/passNumber],ContactPerson,Relation,TelephoneNOContact,Created_date,photo,
	[pass/idcard]) values(@fName,@Lname,@Sex,@DOB,@Age,@Address,@phno,@Email,@IdNo,@contactPerson,@Relation,@cpPhno,GETDATE(),@Photo,@ID)
	set @claimid='CT-00000'+convert(varchar,SCOPE_IDENTITY())
	update Client set  ClientID=@claimid where ClientCode=SCOPE_IDENTITY()
	return @claimid
END


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

Я получаю ошибку не могу преобразовать varchar в тип int пожалуйста решите эту проблему

F-ES Sitecore

Как вы собираетесь преобразовать "CT-000001" в int? Если ваш код заботится только о новом идентификаторе, а не о бите" CT -", то верните только SCOPE_IDENTITY, а не текст @claimed.

1 Ответов

Рейтинг:
1

Richard Deeming

Возвращаемое значение для хранимой процедуры (часть после Return ключевое слово) всегда должен быть int.

Вы пытаетесь вернуть varchar содержащее значение, которое не может быть преобразовано в int Отсюда и ошибка.

Поскольку вы не используете возвращаемое значение процедуры, просто удалите return @claimid линия. Значение по-прежнему будет возвращено вызывающему объекту с помощью выходного параметра.


RajkumarGnanaraj

@Ричард, считая, что я хочу типа varchar в качестве вывода я снял обратку @claimid .но я получаю ту же ошибку

RajkumarGnanaraj

Dim connectionString As String = ConfigurationManager.Соединительные Нити ("ConString").Параметр connectionString
Dim conn как новый SqlConnection(connectionString)
Dim cmd As New SqlCommand(query, conn)
УМК.CommandType = CommandType.Хранимая процедура
УМК.Параметры.AddWithValue ("@fName", txtFirstName. Text)
УМК.Параметры.AddWithValue ("@Lname", txtLName. Text)
УМК.Параметры.AddWithValue ("@Sex", CBSex.SelectedItem.Метод toString)
УМК.Параметры.AddWithValue ("@DOB", Convert.Объект todatetime(DTDOB.Текст))
УМК.Параметры.AddWithValue ("@Age", txtAge. Text)
УМК.Параметры.AddWithValue ("@Address", txtAddress. Text)
УМК.Параметры.AddWithValue("@phno", txtPhNo. Text)
УМК.Параметры.AddWithValue ("@Email", txtEmail. Text)
УМК.Параметры.AddWithValue("@IdNo", txtIDNo. Text)
УМК.Параметры.AddWithValue ("@contactPerson", txtContactPerson.Текст)
УМК.Параметры.AddWithValue ("@Relation", txtRelation.Текст)
УМК.Параметры.AddWithValue ("@claimid", SqlDbType. VarChar)
cmd. Parameters ("@claimid").Направление = ParameterDirection.Выход
УМК.Параметры.AddWithValue ("@cpPhno", txtCPPhno. Text)
УМК.Параметры.AddWithValue ("@Photo", profilepicture)
УМК.Параметры.AddWithValue ("@ID", idorpassport)
Дим, а как целое
Коннектикут.Открыть()
УМК.Метод executenonquery()
Коннектикут.Закрывать()
- Если Не Струна.IsNullOrEmpty (cmd. Parameters ("@claimid").Ценность.Метод toString) Затем
Если a > 0, то
Ящик для сообщений.Show ("Data Added successfully and your clientID is :" & cmd.Parameters("@claimid").Ценность.Метод toString)
Ещё
Ящик для сообщений.Показать ("пожалуйста, попробуйте еще раз")
Конец, Если

НАЧАТЬ
если @Sex= 'мужчина'
начать
set @Sex='M'
конец
если @Sex= 'женщина'
начать
set @Sex='F'
конец

вставить в Client(FirstName,LastName,Sex,DOB,Age,[Address],PhNo,email,[IDCard/passNumber],ContactPerson,Relation,TelephoneNOContact,Created_date,photo,
[пропуск/удостоверение личности]) values(@fName,@Lname,@Sex,@DOB,@Age,@Address,@phno,@Email,@IdNo,@contactPerson,@Relation,@cpPhno,GETDATE(),@Photo,@ID)

выберите @claimid=ClientID из dbo.Клиент, где clientcode=SCOPE_IDENTITY()
Конец

Я так изменился

Richard Deeming

Это означает, что вы пытаетесь вставить varchar в int колонка.

Проверьте типы данных столбцов, в которые вы вставляете, и убедитесь, что типы параметров хранимой процедуры совпадают.

Затем проверьте, что параметры, которые вы создаете в своем VB.NET код соответствует типам параметров хранимой процедуры.