Tengo una pregunta similar a how to check if you are in a transaction. En lugar de verificar, ¿cómo permito las transacciones anidadas?¿Cómo habilito las transacciones anidadas con ADO.NET y SQL Server?
Estoy usando la base de datos de Microsoft SQL Server con ADO.NET. He visto ejemplos usando T-SQL y ejemplos de inicio de transacciones usando comenzar y usar nombres de transacciones. Al llamar connection.BeginTransaction, llamo otra función en la misma conexión, y llama de nuevo BeginTransaction que me da la excepción:
SqlConnection does not support parallel transactions.
Parece muchas variantes Microsoft permiten esto, pero no puedo encontrar la manera de hazlo con mi archivo .mdf.
¿Cómo puedo permitir transacciones anidadas con una base de datos de Microsoft SQL Server usando C# y ADO.NET?
Mi host dice que ofrecen 'Microsoft SQL 2008'. ¿Es este T-SQL? Si no, ¿de dónde viene T-SQL? Solo quiero contar la transacción externa. ¿'Microsoft SQL 2008' no permite esto? (¿Quizás para configurarlo para que no arroje una excepción?) –
T-SQL es la variante de Microsoft del estándar SQL que se ejecuta en todas las versiones de SQL Server. Si desea evitar esta excepción, simplemente evite llamar a 'BeginTransaction' antes de comprometer o anular una transacción anterior; no puede ser una transacción si una transacción anterior aún está pendiente. Le recomiendo que eche un vistazo al uso de TransactionScope (http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope(VS.80).aspx) en lugar de intentar administrarlo usted mismo. –
hmm, eso no es lo mismo. Este código se usó con sqlite y no estoy seguro de si es compatible con él (podría ser porque parece ser compatible con todo ado.net). Pero esto suena extraño, si T-SQL está en todas las versiones del servidor sql entonces ¿no debería tener eso y no debería ser permitido? Esa característica me hará la vida más fácil. Aunque solo hay una función que lo usa (supongo que podría destruirlo ya que solo está en init, donde solo se usa una conexión hasta que se complete). –