PDA

View Full Version : استفاده از stored procedure در EF Code First



mostafa_d26
جمعه 20 دی 1392, 12:48 عصر
سلام
من با code first برنامه نویسی کردم و برنامه به اینگونه هست که بعد از اجرا خود برنامه دیتابیس را میسازه.
حالا من برای بکاپ گیری یک store prosiger قبلا نوشتم که در ado میشد استفاده کنی ولی الان چون پایگاه داده بعد از برنامه ساخته میشه نمیتونم از store prosiger استفاده کنم. و اما سوال من. من چگونه میتونم دستورات داخل store prosiger خودم را بیارم داخل خود برنامه و در خود برنامه در دستورات sql از اونها استفاده کنم و کلا از store prosiger استفاده نکنم ؟؟؟
کد store prosiger :

create proc mybackup @path nvarchar(400) as backup Database peste to disk=@path with init go


کد کنونی در سی شارپ :

private void btnbackup_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(txtselectpath.Text))
errorProvider1.SetError(txtselectpath, "مسیر پشتیبان را مشخص کنید");
else if (string.IsNullOrWhiteSpace(txtbackupname.Text))
errorProvider1.SetError(txtbackupname, "نام فایل پشتیبان را وارد کنید");
else if (File.Exists(txtselectpath.Text + "\\" + txtbackupname.Text.Trim() + ".bak"))
MessageBox.Show("در مسیر انتخاب شده قبلا یک فایل با همین نام ذخیره شده است");
else
{
flag = true;

SqlCommand cmd = new SqlCommand("mybackup", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@path", txtselectpath.Text + "\\" + txtbackupname.Text.Trim() + ".bak");
con.Open();
AsyncCallback callbackdelegate = Handlecallback;
cmd.BeginExecuteNonQuery(callbackdelegate, cmd);
}
}
private void Handlecallback(IAsyncResult result)
{
try
{

cmd = (SqlCommand)result.AsyncState;
cmd.EndExecuteNonQuery(result);
MessageBox.Show("عملیات پشتیبان گیری با موفقیت انجام شد");
}
catch
{
MessageBox.Show("عملیات پشتیبان گیری توسط کاربر متوقف شد");

}

con.Close();
flag = false;
this.BeginInvoke((MethodInvoker)delegate()
{
btnbackup.Enabled = true;
grp2.Enabled = true;



});