powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вернуть результат хранимой процедуры SQL Server
14 сообщений из 14, страница 1 из 1
Вернуть результат хранимой процедуры SQL Server
    #39221186
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хранимая процедура возвращает 1 когда получает аргументами логин и пароль и происходит сопоставление с таблицей пользователей, и 0, когда совпадений нет
Подскажите пожалуйста, как получить результат хранимки чтобы добавить его в условие if?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            authorization();
        }
 
        protected void authorization()
        {
            SqlConnection conn = new SqlConnection(@"Data Source=");
            SqlCommand sqlcomm = new SqlCommand("p_authorization_confirmation", conn);
            sqlcomm.CommandType = System.Data.CommandType.StoredProcedure;
            sqlcomm.Parameters.Add("@login", System.Data.SqlDbType.Text).Value = txtBx_login.Text;
            sqlcomm.Parameters.Add("@password", System.Data.SqlDbType.Text).Value = txtBx_pass.Text;
 
            try
            {
                conn.Open();
                SqlDataReader SqlDataReader = sqlcomm.ExecuteReader();
                if (SqlDataReader.GetString(0) == Convert.ToString(1))
                {
                    Response.Redirect("/Main.aspx");
                }
 
 
                //   sqlcomm.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception ex) { };
        }
...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221209
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77, так делать не хорошо... ну если только в "учебных" целях... и то...
если в sp возврат через return https://support.microsoft.com/en-us/kb/310070
...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221269
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser,

а как правильно это сделать?
По какому принципу?
...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221304
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77buser,

а как правильно это сделать?
По какому принципу?

http://stackoverflow.com/questions/6210027/calling-stored-procedure-with-return-value


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
using (SqlConnection conn = new SqlConnection(getConnectionString()))
using (SqlCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = parameterStatement.getQuery();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("SeqName", "SeqNameValue");

    var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
    returnParameter.Direction = ParameterDirection.ReturnValue;

    conn.Open();
    cmd.ExecuteNonQuery();
    var result = returnParameter.Value;
}
...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221344
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем ExecuteScalar() не устраивает?
...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221485
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за советы. Перестроил таким образом
осталась проблема - в строке return authstatus;
скрин

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 protected void authorization()
        {
            int res = confirmation(txtBx_login.Text, txtBx_pass.Text);
            if (res == 1)
            {
                Response.Redirect("/Main.aspx");
            }
            else
            {
                txtBx_login.Text = null;
                txtBx_pass.Text = null;
            }
        }

        protected int confirmation(string login, string password)
        {
            int authstatus;
            using (SqlConnection conn = new SqlConnection(@"Data Source="))
            using (SqlCommand cmd = new SqlCommand("p_authorization_confirmation", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@login", System.Data.SqlDbType.Text).Value = login;
                cmd.Parameters.Add("@password", System.Data.SqlDbType.Text).Value = password;

                var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
                returnParameter.Direction = ParameterDirection.ReturnValue;

                try
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    authstatus = Convert.ToInt16(returnParameter.Value);
                    conn.Close();

                }
                catch (Exception ex) { }
            }
            
            return authstatus;
        }     

...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221490
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77, там же русским по белому написано... int authstatus = 0;
...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221707
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser, эх.. таки да.. Спасибо за подсказку

подправил, выполняется без ошибок
Но результат всегда 0, хотя эти же параметры напрямую в SSMS возвращают 1
Может где-то проблема с типом данных
Вот сама процедура
Но результат всегда: http://prntscr.com/av2mpa


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
        protected int confirmation(string login, string password)
        {
            int authstatus = 0;
            using (SqlConnection conn = new SqlConnection(@"Data Source="))
            using (SqlCommand cmd = new SqlCommand("p_authorization_confirmation", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@login", SqlDbType.Text).Value = login;
                cmd.Parameters.Add("@password", SqlDbType.Text).Value = password;

                var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
                returnParameter.Direction = ParameterDirection.ReturnValue;

                try
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    authstatus = Convert.ToInt16(returnParameter.Value);
                    conn.Close();
                }
                catch (Exception ex) { }
            }
            
            return authstatus;
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Label3.Text = Convert.ToString(confirmation("user1","123456"));   //(txtBx_login.Text, txtBx_pass.Text));
        }

...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221735
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77
Код: c#
1.
                catch (Exception ex) { }


может сообщения об ошибке не просто херить, а хотя бы в лог записать, потом почитать. Убери вообще try ... catch и читай что за исключения получаешь. а то получается такой код
Код: c#
1.
2.
3.
4.
5.
6.
try {
  ... тут что-то случилось
} catch(...) {
  ... мне пофиг что случилось
}
Телепаты форума - помогите !!!
...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221736
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserjango77, так делать не хорошо... ну если только в "учебных" целях... и то...
Так - это как? Возвращать выборку? Это вполне штатный механизм работы с ХП в MSSQL. Более того, используя MARS, из ХП на клиента можно вернуть сразу несколько выборок - и это тоже вполне штатная возможность.
...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221739
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77buser, эх.. таки да.. Спасибо за подсказку

подправил, выполняется без ошибок
Но результат всегда 0, хотя эти же параметры напрямую в SSMS возвращают 1
Может где-то проблема с типом данных
Вот сама процедура
Но результат всегда: http://prntscr.com/av2mpa


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
        protected int confirmation(string login, string password)
        {
            int authstatus = 0;
            using (SqlConnection conn = new SqlConnection(@"Data Source="))
            using (SqlCommand cmd = new SqlCommand("p_authorization_confirmation", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@login", SqlDbType.Text).Value = login;
                cmd.Parameters.Add("@password", SqlDbType.Text).Value = password;

                var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
                returnParameter.Direction = ParameterDirection.ReturnValue;

                try
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    authstatus = Convert.ToInt16(returnParameter.Value);
                    conn.Close();
                }
                catch (Exception ex) { }
            }
            
            return authstatus;
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Label3.Text = Convert.ToString(confirmation("user1","123456"));   //(txtBx_login.Text, txtBx_pass.Text));
        }





Ну так вы определитесь: если процедура возвращает набор данных (select 0/1) тогда читайте его типа ExecuteReader
Если так как у вас сделано в приложении, тогда измените процедуру, чтобы возвращала значение не select, а через return

Код: sql
1.
2.
IF ... >0 return 1
ELSE return 0
...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221741
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил через ExecuteScalar(), но проблема была скорее всего в типе
Добавил (int)
Код: c#
1.
(Int32)cmd.ExecuteScalar();


Код: c#
1.
(int)authstatus;



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
       protected int confirmation(string login, string password)
        {
            Int32 authstatus = 0;
            using (SqlConnection conn = new SqlConnection(@"Data Source="))
            using (SqlCommand cmd = new SqlCommand("p_authorization_confirmation", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@login", SqlDbType.Text).Value = login;
                cmd.Parameters.Add("@password", SqlDbType.Text).Value = password;

                var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
                returnParameter.Direction = ParameterDirection.ReturnValue;

                try
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    authstatus = (Int32)cmd.ExecuteScalar();
                    conn.Close();
                }
                catch (Exception ex) { }
            }

            return (int)authstatus;
        }

...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221742
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Всем за помощь
...
Рейтинг: 0 / 0
Вернуть результат хранимой процедуры SQL Server
    #39221744
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77Спасибо Всем за помощь

херня какая-то

Код: c#
1.
2.
cmd.ExecuteNonQuery();
 authstatus = (Int32)cmd.ExecuteScalar();
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вернуть результат хранимой процедуры SQL Server
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]