Member 7909353 Ответов: 3

как получить строковое значение из хранимой процедуры


Я хочу получить строковое значение(обозначение) из таблицы входа в систему через хранимую процедуру

CREATE PROCEDURE logincheck
(
@intoption int=0,
@emp_name varchar(20)='',
@uid varchar(20)='',
@p varchar(20)='',
@add varchar(20)='',
@desig varchar(20)='',
@np varchar(20)=''
)
as
begin
declare @designation varchar(20)
if @intoption=0  --for login
 begin
 select @designation=Designation from Login where id=@uid and password=@p
 if @designation is null
 return null
 else 
 return @designation
  end
end

и зовет

string r=checkuser(0, "", TextBox1.Text, TextBox2.Text, "", "", "");



 private string checkuser(int option, string emp_name, string userid, string p, string addres, string desig, string np)
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("logincheck", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@intoption", SqlDbType.VarChar, 50).Value = option;
            cmd.Parameters.Add("@emp_name", SqlDbType.VarChar, 50).Value = emp_name;
            cmd.Parameters.Add("@uid", SqlDbType.VarChar, 50).Value = userid;
            cmd.Parameters.Add("@p", SqlDbType.VarChar, 50).Value = p;
            cmd.Parameters.Add("@add", SqlDbType.VarChar, 50).Value = addres;
            cmd.Parameters.Add("@desig", SqlDbType.VarChar, 50).Value = desig;
            cmd.Parameters.Add("@np", SqlDbType.VarChar, 50).Value = np;
            SqlParameter p1 = new SqlParameter("ret", SqlDbType.Int);
            p1.Direction = ParameterDirection.ReturnValue;
            cmd.Parameters.Add(p1);
            using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                while (rdr.Read())
                {
                    
                    string firstName = rdr.GetString(rdr.GetOrdinal("FirstName"));
                    
                }
                rdr.Close();
            }

           
            string kk = (cmd.Parameters["ret"].Value).ToString();
            return kk;
           
        }



исключение составляет
база {System.Data.Общий.DbException} = {"преобразование не удалось при преобразовании значения varchar 'Admin' В тип данных int."}

Praveen Meghwal

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

3 Ответов

Рейтинг:
24

summon_19

база {System.Data.Общий.DbException} = {"преобразование не удалось при преобразовании значения varchar 'Admin' В тип данных int."}

это исключение возникает из-за того, что у вас есть другой тип данных в первом параметре хранимой процедуры, чем тот, который присутствует в первом параметре в вашем коде C#.

@intoption int=0
cmd.Parameters.Add("@intoption", SqlDbType.VarChar, 50).Value = option;

Попробуйте сначала исправить это


Рейтинг:
1

Sangramsingh Pawar

Смотрите следующую статью и сделайте @обозначение в качестве выходного параметра
Вызов хранимых процедур в ADO.NET[^]


Рейтинг:
1

Member 11882966

во-первых, вы возвращаете строковое значение в процедуре хранения его неправильно. он всегда возвращает значение int, если вы хотите вернуть строковое значение с помощью инструкции select. например, выберите @обозначение в качестве обозначения


CHill60

"если вы хотите вернуть строковое значение с помощью оператора select" - это, или лучше было бы использовать выходной параметр.