Динамические параметры в Sqldatasource

Тема в разделе ".NET", создана пользователем Red Wind, 2 мар 2007.

Статус темы:
Закрыта.
  1. Red Wind

    Red Wind Гость

    Доброго времени суток. Пытаюсь динамически передать UpdateCommand в SqlDataSource, но из этого ничего не выходит. В событии Page_Load выполняю этот код:
    Код (Text):
        private void CreatingCommands()
    {
    SqlConnection conn = new SqlConnection(ConnectionString);
    SqlDataAdapter adapter = new SqlDataAdapter(DynamicSqlDataSource.SelectCommand, conn);
    SqlCommandBuilder sqb = new SqlCommandBuilder(adapter);
    adapter.UpdateCommand = sqb.GetUpdateCommand(true);
    DynamicSqlDataSource.UpdateCommand = adapter.UpdateCommand.CommandText;

    //проблема в том, что тип параметров adapter не совпадает с типом SqlDataSource
    for (int i = 0; i <= adapter.UpdateCommand.Parameters.Count - 1; i++)
    {
    Parameter param = new Parameter();
    if (adapter.UpdateCommand.Parameters[i].DbType == DbType.Int32)
    param.Type = TypeCode.Int32;
    if (adapter.UpdateCommand.Parameters[i].DbType == DbType.StringFixedLength)
    param.Type = TypeCode.String;
    param.Name = adapter.UpdateCommand.Parameters[i].ParameterName;
    DynamicSqlDataSource.UpdateParameters.Add(param);
    }
    }
    Вроде бы всё ок, UpdateCommand передаётся, параметры создаются. Но когда происходит Update, то в окне браузера выскакивает такая ошибка:
    Самое неприятное, то что @Original_ID существует в DynamicSqlDataSource.UpdateParameters. Собственно вопрос, как мне корректно предать UpdateParameters в SqlDataSource?
     
  2. Pasha

    Pasha Гость

    Ты копируешь параметры с исправлением типа, но забываешь задать их значения.
    допиши строчку
    param.Value = adapter.UpdateCommand.Parameters.Value;

    ЗЫ. И вынеси adapter.UpdateCommand.Parameters в переменную внутри цикла.
     
  3. Red Wind

    Red Wind Гость

    Да, я конечно облопошился, забыл передать значение:). Но не всё так просто:(. Такой штуки как param.Value вообще не существует, есть только param.DefaultValue, и это свойство в любом случае типа string. Пробывал делать так:
    Код (Text):
    if (adapter.UpdateCommand.Parameters[i].Value != null)
    param.DefaultValue = adapter.UpdateCommand.Parameters[i].Value.ToString();
    Но это ничего не изменило.
     
  4. Pasha

    Pasha Гость

    Извини, торможу. Не сразу понял что такое DynamicSqlDataSource :)

    Дело в том, что sqb.GetUpdateCommand генерирует запрос, в который надо передать старые значения параметров. Пропиши у DynamicSqlDataSource.OldValuesParameterFormatString="Original_{0}", у контрола, который к нему привязан - DataKeyNames="ID". И не надо будет вообще ничего добавалять в DynamicSqlDataSource.UpdateParameters. Датасорс сам соберет нужные значения. В крайнем случае - подебагай DynamicSqlDataSource_Updating, проверь что имено он передает как параметры.
     
  5. Red Wind

    Red Wind Гость

    Я так сделал, но это не сильно помогло. Вместо ошибки Must declare the scalar variable "@Original_ID". Вылазит Must declare the scalar variable "@IsNull_Name".
    Кстати, вот моя табличка:
    Код (Text):
    CREATE TABLE TestTable(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](50) NULL)
     
Загрузка...
Похожие Темы - Динамические параметры Sqldatasource
  1. Rinulik
    Ответов:
    2
    Просмотров:
    1.390
  2. Julia61
    Ответов:
    1
    Просмотров:
    1.229
  3. vladis222
    Ответов:
    2
    Просмотров:
    2.257
  4. Omh
    Ответов:
    9
    Просмотров:
    5.169
  5. AvasKvas
    Ответов:
    25
    Просмотров:
    6.162
Статус темы:
Закрыта.

Поделиться этой страницей