#.net #sql-server #tsql #migration #sqlcommand
#.net #sql-сервер #tsql #миграция #sqlcommand
Вопрос:
У меня есть некоторый Transact-SQL, который выглядит следующим образом, может ли он быть выполнен через объект SqlCommand или мне нужно начать изучать объекты управления Sql?
BEGIN TRANSACTION
BEGIN TRY
IF NOT EXISTS
(
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG = (SELECT DB_NAME())
AND TABLE_NAME = 'SchemaVersion'
)
BEGIN
Print 'Migrating up...'
CREATE TABLE SchemaVersion (
Id INT IDENTITY(1,1) NOT NULL,
Version INT NOT NULL,
CONSTRAINT PK_SchemaVersion PRIMARY KEY CLUSTERED (
Id ASC
)
)
INSERT INTO SchemaVersion (Version) VALUES(1)
PRINT 'Migrated from 0 to 1'
END
ELSE IF (SELECT Version FROM SchemaVersion) = 1
BEGIN
Print 'Migrating down...'
DROP TABLE Dia_SchemaVersion
PRINT 'Migrated from 1 to 0'
END
ELSE
PRINT 'Not migrating...'
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
Ответ №1:
Да, это может быть выполнено SqlCommand
— самым простым способом было бы поместить это в хранимую процедуру и выполнить ее.
С какими проблемами вы сталкиваетесь?
Что касается изучения SSMS — если вы разрабатываете на SQL Server, это неплохая идея.
Комментарии:
1. Никаких особых проблем, я просто хотел избежать неправильного пути.
Ответ №2:
Просто оберните это в хранимую процедуру и вызовите ее с помощью SqlCommand .Метод ExecuteNonQuery(). Вы можете «прослушивать» печатные сообщения из вашего .Сетевой код путем обработки события информационного сообщения SqlConnection. Это также помогает установить для свойства FireInfoMessageEventOnUserErrors соединения значение true.
Комментарии:
1. Это отличный совет по поводу InfoMessage, спасибо! Жаль, что я использую System.Data. Общие классы.
Ответ №3:
Вам нужно понимать ADO.NET и как работают объекты, в первую очередь
- Подключение
- Команда
- Транзакция
- DataReader
- Набор данных
- DataDapter
Объект Command может принимать любой запрос, совместимый с SQL (ANSI SQL). Если вы собираетесь выполнять транзакции, я предлагаю вам обрабатывать транзакции
- Через ADO.NET Транзакция…вот некоторое чтение
- Вместо этого вызовите хранимую процедуру из объекта command, вместо того чтобы передавать ее как часть SQL.