Q1 - В приведенном ниже примере кода среда выполнения преобразует значение между двумя
несовместимые типы:
<SelectParameters>
<asp:Parameter Name="City" Type="Int32" />
</SelectParameters>
protected void SqlDataSource2_Selecting(object sender,
SqlDataSourceSelectingEventArgs e)
{e.Command.Parameters["@City"].Value = "100";}
Исключение, которое я получил:
«Преобразование не удалось при преобразовании значения nvarchar« Сиэтл »в
тип данных int. »
A) Вышеуказанное исключение предполагает, что во время выполнения удалось преобразовать
значение типа String в значение типа Int32, и, следовательно,
исключение произошло на SqlServer ?!
B) Поскольку String и Int32 являются несовместимыми типами, почему время выполнения
выполнить преобразование из String в Int32 в первую очередь?
Разве не факт, что мы имеем дело с несовместимыми типами, делает
среда выполнения «понимает», что в приложении, скорее всего, есть ошибка, похожая на
Компилятор «понимает», что имеет дело (в приведенном ниже коде) с двумя
несовместимые типы:
String s = ”something”;
int i = (int)s; //error
2:
A)
public void GetEmployee (int EmployeeID);
<asp:ObjectDataSource SelectMethod=”GetEmployee” …>
<SelectParameters>
<asp:ControlParameter Name = ”EmployeeID” ...>
</SelectParameters>
Если по какой-либо причине параметр EmployeeID равен NULL, ObjectDataSource
преобразует ноль в ноль и передает его в качестве аргумента в GetEmployee ()
способ.
Почему среда выполнения делает такое преобразование? Не бросал
исключение имеет больше смысла?
B) «Используйте свойство ConvertEmptyStringToNull, чтобы указать,
пустое значение строки автоматически преобразуется в ноль, когда данные
поле обновляется в источнике данных. »
Я не совсем понимаю полезность этого свойства. Почему бы
пустая строка указывает на то, что мы хотим, чтобы null был вставлен в источник
поле данных? Я предполагаю, что это поле данных имеет тип String? затем
почему бы также не иметь ConvertZeroInt32ToNull и т. д.?
Q3:
<asp:SqlDataSource ID="sourceEmployees" runat="server"
ProviderName="System.Data.SqlClient"
ConnectionString="<%$ ConnectionStrings:Northwind %>"
SelectCommand="SELECT EmployeeID, FirstName,LastName,
Title, City FROM Employees WHERE City=@City">
<SelectParameters>
<asp:Parameter Name="City"/>
</SelectParameters>
</asp:SqlDataSource>
A) Я предполагаю, что когда вы не указываете, какой тип параметра
Например, «Город», он автоматически имеет тип Object, что означает, что
Позже может быть назначено значение любого типа. Таким образом, если «Город» позже (скажем,
внутри обработчика событий SqlDataSource2_Selecting ()) присвоено значение
неправильный тип, это неправильное назначение будет обнаружено только на Sql
сервер, а не раньше (конечно, сервер Sql сообщит об этой ошибке
вернуться на веб-сервер)?
B) Если мы создаем экземпляр SqlParameter типа NVarChar (20) и хотим
чтобы передать этот параметр хранимой процедуре, Ado.net перейдет к
хранимая процедура только значение этого параметра, или это будет также
как-то сообщить процедуре точный тип этого параметра (который
такое NVarChar (20))?
спасибо