Сохраненный тайм-аут Proc и SqlCommand

Где Вы получаете номера телефона от? Если Вы получите их от части телефонной сети, Вы получите строку цифр и типа числа и плана, например,

441234567890 типов/планов 0x11 (что означает международный E.164)

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

6
задан gbn 11 November 2009 в 19:50
поделиться

2 ответа

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

SQL:

Create Procedure TestDelay
AS

waitfor delay '00:00:40'

update table_1
set dt = getdate()

И в VB.Net (то же самое, что и C # для этой цели):

    Dim con As New SqlConnection(myconnectionstring)
    Dim com As New SqlCommand("TestDelay", con)
    com.CommandType = CommandType.StoredProcedure
    con.Open()
    Try
        com.ExecuteNonQuery()
    Catch ex As Exception
        con.Close()
        Response.Write(ex.Message)
    End Try

Результат? Процедура не была завершена по истечении тайм-аута. Я проверил, что происходило во время трассировки в профилировщике SQL, и убедился, что достаточно SQL, чтобы обернуть вызов в транзакцию и откатить эту транзакцию по истечении времени ожидания.

Примечание. Этот тест проводился с SQL 2005, но я подозреваю результаты будут аналогичными в других версиях.

3
ответ дан 17 December 2019 в 07:05
поделиться

As brendan stated, the client sends an "abort" and processing stops dead. As simple as that.

However, it's more complex than that...

Any transactions are not rolled back by default and locks are just left there until the connection is closed. If returned to the connection pool and reused, then this does not count as closing.

This is why SET XACT_ABORT ON (other questions SO1, SO2) is recommended

1
ответ дан 17 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

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