Измененная хранимая процедура не распознается в ASP.NET - SQLDataSource - PullRequest
0 голосов
/ 06 октября 2011

Я работаю с ASP.NET и StoredProcedure. Я изменяю хранимую процедуру, поэтому теперь она возвращает 10 полей, а не 9. Я добавил соответствующее текстовое поле в asp.net, которое получает 10-е поле.

<asp:TextBox ID="ID" runat="server" Text='<%# Eval("ID") %>' Width="80px" ReadOnly="true"></asp:TextBox>

Но он терпит неудачу, говоря

Привязка данных: «System.Data.DataRowView» не содержит свойство с именем «ID».

Я запускаю хранимую процедуру в SQL Management studio, и она действительно не возвращает вновь измененное поле. Я останавливаюсь и запускаю движок SQL, и теперь он выдает новое значение, но в моем приложении ASP.net он все еще не распознает новое значение. Каков наилучший способ устранить это? Это случилось со мной и раньше.

Добавление кода, где вызывается SP:

SqlConnection aConn = new 
SqlConnection(ConfigurationManager.ConnectionStrings["DBConn"].ConnectionString);
SqlCommand aCommand = new SqlCommand("GetCustomer", aConn);
aCommand.CommandType = CommandType.StoredProcedure;
aCommand.Parameters.Add("@ID", SqlDbType.Int).Value = aID;
SqlDataAdapter adapter = new SqlDataAdapter(aCommand);
DataSet aCustomerDS = new DataSet();
adapter.Fill(aCustomerDS);

Моя хранимая процедура (здесь нет ничего странного):

CREATE PROCEDURE [dbo].[GetCustomer]
    @ID int
AS
BEGIN
    SET NOCOUNT ON;

IF @ID = 0
BEGIN    
SELECT  ID,
    [this field] as thisfield,
       [that field] as thatfield,
       [new field] as newfield
FROM MyDB.dbo.customers
ORDER BY ID DESC
END
ELSE
BEGIN
SELECT  ID,
    [this field] as thisfield,
       [that field] as thatfield,
       [new field] as newfield
FROM MyDB.dbo.Customers
WHERE ID = @ID
ORDER BY ID DESC
END
END

FormView используется для привязки данных к sdsCustomer

<asp:FormView ID="fvCustomer" runat="server" AllowPaging="True" DataSourceID="sdsCustomer"
            DataKeyNames="ID" OnPreRender="OnfvCustomer_PreRender">

Ответы [ 3 ]

1 голос
/ 06 октября 2011

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

0 голосов
/ 12 октября 2011

Мой ответ: это было сложно.

FormView1 был привязан к двум хранимым процедурам: 1) использование SQLDataSource 2) использование SQLDataSource на лету

Если бы я изменил тот, который создан на лету, ASP выдаст мне ошибку, что новое поле не распознается представлением формы. Чтобы избавиться от этой ошибки, я изменил исходный SQLDataSource, который был привязан к форме просмотра, и добавил это поле, чтобы избавиться от ошибки. Так что в основном это ошибка Microsoft. Он смотрит на другую хранимую процедуру, и я заполняю форму представления другой хранимой процедурой, если поле в двух хранимых процедурах не совпадает, я получаю очень вводящую в заблуждение ошибку, потому что идентификатор действительно находится в хранимой процедуре, но не в той это связано с формой просмотра. Ниже приведена схема ошибки.

enter image description here

0 голосов
/ 06 октября 2011

Как лучше всего это устранить?

Как выглядит источник для вашего сохраненного процесса?

Установить точку останова на строке, в которой выполняется запрос. Изучите результаты, которые возвращаются, и убедитесь, что ваш столбец идентификаторов действительно присутствует.

Либо запустите средство профилирования SQL и убедитесь, что:

  1. Столбец ID присутствует в наборе результатов, когда процедура вызывается с теми же значениями параметров, которые использует приложение,
  2. Ваш процесс возвращает только один набор результатов.
  3. Убедитесь, что вы включили строку

    включить nocount;

в вашей процедуре.

Если процедура непреднамеренно возвращает несколько наборов результатов (что произойдет, если вы пропустите оператор set nocount), ваш источник данных может не содержать того, что вы ожидаете.

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