Как я могу установить значение sqldatasource параметра?

Я просто столкнулся с той же проблемой, когда издевался struct .

Я получаю сообщение об ошибке:

TypeError: перехват классов, которые не наследуются от BaseException, не допускается

При попытке отловить struct.error, поднятый из struct.unpack.

Я обнаружил, что самым простым способом обойти это в моих тестах было просто установить значение атрибута ошибки в моем макете равным Exception. Например,

Метод, который я хочу проверить, имеет следующий базовый шаблон:

def some_meth(self):
    try:
        struct.unpack(fmt, data)
    except struct.error:
        return False
    return True

Тест имеет этот базовый шаблон.

@mock.patch('my_module.struct')
def test_some_meth(self, struct_mock):
    '''Explain how some_func should work.'''
    struct_mock.error = Exception
    self.my_object.some_meth()
    struct_mock.unpack.assert_called()
    struct_mock.unpack.side_effect = struct_mock.error
    self.assertFalse(self.my_object.some_meth()

Это похоже на подход, принятый @BillB, но он, безусловно, проще, так как мне не нужно добавлять импорт в мои тесты и все равно работать так же. Мне кажется, это логичное завершение общей цепочки рассуждений в ответах здесь.

9
задан GEOCHET 12 June 2009 в 19:37
поделиться

5 ответов

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

2
ответ дан 4 December 2019 в 13:49
поделиться

Вы можете установить значение вашего параметра следующим образом:

SqlParameter parameter1 = new SqlParameter("@ClientID", SqlDbType.BigInt);
parameter1.Value = 32;
SqlDataSource2.SelectParameters.Add(parameter1);
3
ответ дан 4 December 2019 в 13:49
поделиться

Чтобы заставить его работать, нужно удалить параметр, который вы пытаетесь использовать, перед его добавлением. Следующая адаптированная версия вашего кода должна работать:

' NOTE that there is no "@" sign when you use your parameters in the code
Parameter p = strCommandSqlDataSource2.SelectParameters["ClientID"]
strCommandSqlDataSource2.SelectParameters.Remove(p)
strCommandSqlDataSource2.SelectParameters.Add("ClientID", iClientID)

Вы не должны использовать знак «@» при именовании параметров в части кода, в которой они используются. Вы должны использовать его только в строке SQLCOMMAND.

Надеюсь, это поможет.

8
ответ дан 4 December 2019 в 13:49
поделиться

Вы можете обойти это с помощью события Selecting в SqlDataSource. Теперь, как можно ограничить разочарование в таких элементах управления !!!

Другой альтернативой было бы добавить HiddenField в ваша форма, и SqlDataSource может получить оттуда свое значение.

0
ответ дан 4 December 2019 в 13:49
поделиться

Вот версия VB:

Dim parameter As New System.Web.UI.WebControls.Parameter("ClientID", Data.DbType.Int32)
parameter.DefaultValue = 45
sqlTicketInfo.SelectParameters.Add(parameter)

В версии VB.NET не было возможности установить значение, поэтому вместо этого я установил значение по умолчанию. Значение по умолчанию используется, если значение не инициализировано, поэтому, поскольку мы не можем установить значение, оно в любом случае автоматически будет использовать значение по умолчанию.

0
ответ дан 4 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: