PDA

View Full Version : سوال: اجرای یک فایل اسکریپت sql server در محیط windows application



mohammad diba
یک شنبه 15 اسفند 1389, 14:21 عصر
سلام بر دوستان و بزرگواران برنامه نویس
من چند وقتی هست که درگیر یه سوال هستم و اونم اینکه من یک فایل اسکریپت از توابع دیتابیس دارم می خوام وقتی برنامه ام اجرا شد ابتدا تمام فایل رو بخونه و اجرا کنه امکانش هست منو راهنمایی کنید ؟

Reza_Yarahmadi
یک شنبه 15 اسفند 1389, 16:13 عصر
در صورتی که دستورات ساخت ساختار دیتابیس بصورت زیر باشه میتونید به راحتی اونو اجرا کنید
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TableName](
[GoodCode] [int] NULL,
[OrderDate] [datetime] NULL
) ON [PRIMARY]
END


IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[sp]
@id nvarchar(max)
AS
BEGIN
Select * From dbo.tbl Where Id = @Id
END
'
END


IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetPrerequisite]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
BEGIN
execute dbo.sp_executesql @statement = N'CREATE FUNCTION [dbo].[GetPrerequisite]
(
@Ids varchar(max)
)
RETURNS Nvarchar(Max)
AS
BEGIN
Declare @Message Nvarchar (Max)
EXEC @Message = dbo.usp_GetPre @Ids
RETURN @Message
END
'
END
نحوه اجرای اسکریپت هم فرقی با بقیه موارد نداره
SqlCommand cmd = new SqlCommand(File.ReadAllText("File Path"), conn );
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
ولی در صورتی که اسکریپت شامل دستوراتی مثل GO باشه یا باید فایل رو اصلاح کنید و به فرمت مثال بالا در بیارید یا فایل رو بر اساس GO بخش بخش کنید و اونها رو جداگانه اجرا کنید.
String fileText = File.ReadAllText("File Path");
foreach (String str in fileText.Split(new String[] { "GO" }))
{
SqlCommand cmd = new SqlCommand(str, conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}