Будет ли Ado.net передавать хранимой процедуре только значение или также тип? - PullRequest
0 голосов
/ 22 марта 2009

» SelectCommand = "SELECT EmployeeID, FirstName, LastName, Название, Город ОТ сотрудников ГДЕ Город = @ Город ">

A) Я предполагаю, что когда вы не указываете, какой тип параметра Например, «Город», он автоматически имеет тип Object, что означает, что Позже может быть назначено значение любого типа. Таким образом, если «Город» позже (скажем, внутри обработчика событий SqlDataSource2_Selecting ()) присвоено значение неправильный тип, это неправильное назначение будет обнаружено только на Sql сервер, а не раньше (конечно, сервер Sql сообщит об этой ошибке вернуться на веб-сервер)?

B) Если мы создаем экземпляр SqlParameter типа NVarChar (20) и хотим чтобы передать этот параметр хранимой процедуре, Ado.net перейдет к хранимая процедура только значение этого параметра, или это будет также как-то сообщить процедуре точный тип этого параметра (который такое NVarChar (20))?

спасибо

Ответы [ 3 ]

3 голосов
/ 22 марта 2009

Нет, серверу sql не сообщается тип параметра в вызове хранимой процедуры. Если вы передадите параметр в, он попытается преобразовать его в правильный тип и пожалуется, если не сможет выполнить преобразование.

1 голос
/ 22 марта 2009

Параметры устанавливаются SQL Server, и я вполне уверен, что тип, указанный в параметре, не передается вместе с данными, когда ADO фактически связывается с сервером. Так что да, вполне возможно указать неправильный тип данных, и вы не узнаете, пока SQL Server не выдаст ошибку.

Аналогично для B ... отправляются только данные.

1 голос
/ 22 марта 2009

Тип данных, в котором хранится значение параметра, всегда object. Если вы не укажете тип, драйвер будет угадывать тип данных базы данных, основываясь на типе данных присвоенного ему значения, поэтому безопаснее указать требуемый тип.

Тип данных (NVarChar) может быть передан в базу данных, в этом я не совсем уверен, но длина - нет. Указанная длина ограничивает только те данные, которые отправляются в базу данных, она не должна соответствовать длине, указанной в хранимой процедуре (но обычно должна). Если вы используете длину, которая больше указанной в хранимой процедуре, драйвер может разрешить отправку значения, которое слишком длинно для хранимой процедуры, чтобы принять.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...