powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Какая разница?
10 сообщений из 10, страница 1 из 1
Какая разница?
    #36787792
tsaritsin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть два способа вызвать хранимую процедуру на MS SQL Server 2005:
1-й:
Код: plaintext
1.
2.
3.
SqlConnection _sqlCon = new SqlConnection("...");
SqlCommand _sqlCmd = new SqlCommand("exec dbo.DelEntity @EntityID = 1", _sqlCon);
_sqlCmd.ExecuteNonQuery();
2-й:
Код: plaintext
1.
2.
3.
4.
5.
SqlConnection _sqlCon = new SqlConnection("...");
SqlCommand _sqlCmd = new SqlCommand("dbo.DelEntity", _sqlCon);
_sqlCmd.CommandType = CommandType.StoredProcedure;
_sqlCmd.Parameters.Add("@EntityID", SqlDbType.Int).Value = 1;
_sqlCmd.ExecuteNonQuery();
Какой из них лучше использовать и почему?
...
Рейтинг: 0 / 0
Какая разница?
    #36787833
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsaritsin,

Второй - он проверит "качество" параметра еще до отправки команды серверу.
...
Рейтинг: 0 / 0
Какая разница?
    #36787874
tsaritsin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курдльtsaritsin,

Второй - он проверит "качество" параметра еще до отправки команды серверу.

Т.е. проверит тип значения? Я как то пробовал установить значение не целого типа, так мне вроде с сервера приходило сообщение что не получается преобразовать тип данных, т.е. параметр в этом случае не проверялся.
Или вы имели ввиду что то другое?
...
Рейтинг: 0 / 0
Какая разница?
    #36787975
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsaritsinКурдльtsaritsin,

Второй - он проверит "качество" параметра еще до отправки команды серверу.

Т.е. проверит тип значения? Я как то пробовал установить значение не целого типа , так мне вроде с сервера приходило сообщение что не получается преобразовать тип данных, т.е. параметр в этом случае не проверялся.
Или вы имели ввиду что то другое?

здесь пробовали?

Код: plaintext
_sqlCmd.Parameters.Add("@EntityID", SqlDbType.Int).Value = 1;

код можно увидеть?
...
Рейтинг: 0 / 0
Какая разница?
    #36788043
tsaritsin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
try
{
    SqlConnection _sqlCon = new SqlConnection("...");
    SqlCommand _sqlCmd = new SqlCommand("dbo.DelEntity", _sqlCon);
    _sqlCmd.CommandType = CommandType.StoredProcedure;
    _sqlCmd.Parameters.Add("@EntityID", SqlDbType.Int).Value = "a";
    this._sqlCon.Open();
    _sqlCmd.ExecuteNonQuery();          // Выполним процедуру
}
catch (Exception _e)
{
    throw (_e);
}

При выполнении процедуры появляется исключение:
"Не удалось преобразовать значение параметра из String в Int32."

Вы хотите сказать что это сообщение вернул не SQL сервер, а метод ExecuteNonQuery()?
...
Рейтинг: 0 / 0
Какая разница?
    #36788080
tsaritsin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Провел небольшой эксперимент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
try
{
    SqlConnection _sqlCon = new SqlConnection("...");
    SqlCommand _sqlCmd = new SqlCommand("dbo.DelEntity", _sqlCon);
    _sqlCmd.CommandType = CommandType.StoredProcedure;

    _sqlCmd.Parameters.AddWithValue("@EntityID", "a");

    this._sqlCon.Open();
    _sqlCmd.ExecuteNonQuery();          // Выполним процедуру
}
catch (Exception _e)
{
    throw (_e);
}


Сообщение изменилось: "Ошибка при преобразовании типа данных nvarchar к int."
Значит одна разница все же есть это: преобразование значений параметров к нужному типу и выдача исключения еще до запуска процедуры на сервере.
А еще аргументы в пользу одного из двух способов есть?
...
Рейтинг: 0 / 0
Какая разница?
    #36788105
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если правильно написать результат будет один и тот же, но зачем же делать через Ж.
Вам дали инструмент, кто вам виноват что вы гвозди микроскопом забиваете.

Правильный вариант номер 2.

1вый вызовет хранимку sp_executesql , в которой будет парсится запрос и потом выполняться.
2рой вызовет непосредственно указанную вами хранимку, никакого парсинга запроса не будет.

Открыть SQL Profiler религия не позволяет ?
...
Рейтинг: 0 / 0
Какая разница?
    #36788117
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsaritsin,

Читать до просветления (с) Нахлобуч.
...
Рейтинг: 0 / 0
Какая разница?
    #36788158
tsaritsin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за содержательные ответы. Особенно stimpi .
До SQL Profiler очередь еще не дошла. В первую очередь интересовала разница при выполнении в самом клиенте. Я подразумевал что при любых раскладах он пошлет на сервер запрос типа:
Код: plaintext
1.
exec dbo.DelEntity @EntityID =  1 

А про использование sp_executesql я и не подозревал.
...
Рейтинг: 0 / 0
Какая разница?
    #36788797
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsaritsinВсем спасибо за содержательные ответы. Особенно stimpi .
До SQL Profiler очередь еще не дошла. В первую очередь интересовала разница при выполнении в самом клиенте. Я подразумевал что при любых раскладах он пошлет на сервер запрос типа:
Код: plaintext
1.
exec dbo.DelEntity @EntityID =  1 

А про использование sp_executesql я и не подозревал.

о, сколько нам открытий чудных...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Какая разница?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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