esafb52
سه شنبه 28 بهمن 1393, 20:07 عصر
با سلام
امروز قصد دارم یک کلاس نامرتب ولی کاربردی رو براتون بذارم علت نامرتب بودنش اینه که در اون چند تا چیز رو با هم ادغام کردم تا آموزش امروز رو تو یک کلاس بتونم ارائه بدم خدمت دوستان
اما قبل از شروع توضیحی بدم راجب هدفم از این کار
اکثر دوستان مبتدی مثل خودم برای انتقال دیتابیس به سیستم مقصد با مشکل مواجه میشن و نمیتون دیتابیس رو اتچ کنن و یا اون رو بسازن
من دو روش پیشنهاد میدم
الف - استفاده از این کلاس
البته باید یه اسکرپت از دیتابیس خودتون بگیرین و با نام sql.sql کنار برنامه بذارین یا اینکه از پراپرتی مربوطه ستش کنین البته در این روش باید اسم دیتابیس رو ست کنین و برای تهیه اسکریپت در SQL Server Management Studio بر روی دیتابیس کلیک راست و از قسمت task گزینه جنریت دیتابیس اسکرپت رو انتخاب کنین
using System.Collections.Generic;
using System.Data.SqlClient;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace DbCreation
{
public static class DbCreating
{
private static string _scriptpath = Application.StartupPath + "\\" + "sql.sql";
private static string _dbpath = Application.StartupPath;
private static string _dbname = "db";
private static string _servername = @".\SQLExpress";
private static string _constring = string.Format(@"Data Source={0};Integrated Security=True;", _servername);
private static bool _dbcreated = false;
public static bool dbcreated
{
get { return _dbcreated = false; }
set { _dbcreated = value; }
}
public static string servername
{
get { return _servername; }
set { _servername = value; }
}
public static string dbname
{
get { return _dbname; }
set { _dbname = value; }
}
public static string dbpath
{
get { return _dbpath; }
set { _dbpath = value; }
}
public static string constring
{
get { return _constring; }
set { _constring = value; }
}
public static string scriptpath
{
get { return _scriptpath; }
set { _scriptpath = value; }
}
public static bool DbCreationQuery()
{
string[] files =
{
Path.Combine(_dbpath, _dbname + ".mdf"),
Path.Combine(_dbpath, _dbname + ".ldf")
};
string query = "CREATE DATABASE " + _dbname +
" ON PRIMARY" +
" (NAME = " + _dbname + "_data," +
" FILENAME = '" + files[0] + "'," +
" SIZE = 3MB," +
" MAXSIZE = 10MB," +
" FILEGROWTH = 10%)" +
" LOG ON" +
" (NAME = " + _dbname + "_log," +
" FILENAME = '" + files[1] + "'," +
" SIZE = 1MB," +
" MAXSIZE = 5MB," +
" FILEGROWTH = 10%)" +
";";
SqlConnection connection = new SqlConnection(_constring);
SqlCommand command = new SqlCommand(query, connection);
connection.Open();
int res = command.ExecuteNonQuery();
connection.Close();
connection.Dispose();
command.Dispose();
if (res != 0)
return true;
return false;
}
public static void RunScript()
{
if (_dbcreated)
{
string script = File.ReadAllText(_scriptpath);
IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$",
RegexOptions.Multiline | RegexOptions.IgnoreCase);
SqlConnection connection = new SqlConnection(_constring);
connection.Open();
foreach (string commandString in commandStrings)
{
if (commandString.Trim() != "")
{
new SqlCommand(commandString, connection).ExecuteNonQuery();
}
}
connection.Close();
connection.Dispose();
}
}
}
}
و اینم روش استفاده :
// DbCreating.servername = "???????";
// DbCreating.scriptpath = "?????????";
// DbCreating.constring = "????????";
DbCreating.dbname = "fulejask";
if (DbCreating.DbCreationQuery())
{
DbCreating.dbcreated = true;
DbCreating.RunScript();
MessageBox.Show("دیتابیس با موفقیت ایجاد شد");
}
دو- استفاده از ابزاری جالبی به نام SQL Packager
نکته : در حین ایجاد دیتابیس مسیر نباید در درایوی انتخاب بشه که فشردگی فایل ها و پوشه ها رو براش انتخاب کردین اگر مشکلی داشت اطلاع بدین تا پاسخ بدم
موفق باشید
امروز قصد دارم یک کلاس نامرتب ولی کاربردی رو براتون بذارم علت نامرتب بودنش اینه که در اون چند تا چیز رو با هم ادغام کردم تا آموزش امروز رو تو یک کلاس بتونم ارائه بدم خدمت دوستان
اما قبل از شروع توضیحی بدم راجب هدفم از این کار
اکثر دوستان مبتدی مثل خودم برای انتقال دیتابیس به سیستم مقصد با مشکل مواجه میشن و نمیتون دیتابیس رو اتچ کنن و یا اون رو بسازن
من دو روش پیشنهاد میدم
الف - استفاده از این کلاس
البته باید یه اسکرپت از دیتابیس خودتون بگیرین و با نام sql.sql کنار برنامه بذارین یا اینکه از پراپرتی مربوطه ستش کنین البته در این روش باید اسم دیتابیس رو ست کنین و برای تهیه اسکریپت در SQL Server Management Studio بر روی دیتابیس کلیک راست و از قسمت task گزینه جنریت دیتابیس اسکرپت رو انتخاب کنین
using System.Collections.Generic;
using System.Data.SqlClient;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace DbCreation
{
public static class DbCreating
{
private static string _scriptpath = Application.StartupPath + "\\" + "sql.sql";
private static string _dbpath = Application.StartupPath;
private static string _dbname = "db";
private static string _servername = @".\SQLExpress";
private static string _constring = string.Format(@"Data Source={0};Integrated Security=True;", _servername);
private static bool _dbcreated = false;
public static bool dbcreated
{
get { return _dbcreated = false; }
set { _dbcreated = value; }
}
public static string servername
{
get { return _servername; }
set { _servername = value; }
}
public static string dbname
{
get { return _dbname; }
set { _dbname = value; }
}
public static string dbpath
{
get { return _dbpath; }
set { _dbpath = value; }
}
public static string constring
{
get { return _constring; }
set { _constring = value; }
}
public static string scriptpath
{
get { return _scriptpath; }
set { _scriptpath = value; }
}
public static bool DbCreationQuery()
{
string[] files =
{
Path.Combine(_dbpath, _dbname + ".mdf"),
Path.Combine(_dbpath, _dbname + ".ldf")
};
string query = "CREATE DATABASE " + _dbname +
" ON PRIMARY" +
" (NAME = " + _dbname + "_data," +
" FILENAME = '" + files[0] + "'," +
" SIZE = 3MB," +
" MAXSIZE = 10MB," +
" FILEGROWTH = 10%)" +
" LOG ON" +
" (NAME = " + _dbname + "_log," +
" FILENAME = '" + files[1] + "'," +
" SIZE = 1MB," +
" MAXSIZE = 5MB," +
" FILEGROWTH = 10%)" +
";";
SqlConnection connection = new SqlConnection(_constring);
SqlCommand command = new SqlCommand(query, connection);
connection.Open();
int res = command.ExecuteNonQuery();
connection.Close();
connection.Dispose();
command.Dispose();
if (res != 0)
return true;
return false;
}
public static void RunScript()
{
if (_dbcreated)
{
string script = File.ReadAllText(_scriptpath);
IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$",
RegexOptions.Multiline | RegexOptions.IgnoreCase);
SqlConnection connection = new SqlConnection(_constring);
connection.Open();
foreach (string commandString in commandStrings)
{
if (commandString.Trim() != "")
{
new SqlCommand(commandString, connection).ExecuteNonQuery();
}
}
connection.Close();
connection.Dispose();
}
}
}
}
و اینم روش استفاده :
// DbCreating.servername = "???????";
// DbCreating.scriptpath = "?????????";
// DbCreating.constring = "????????";
DbCreating.dbname = "fulejask";
if (DbCreating.DbCreationQuery())
{
DbCreating.dbcreated = true;
DbCreating.RunScript();
MessageBox.Show("دیتابیس با موفقیت ایجاد شد");
}
دو- استفاده از ابزاری جالبی به نام SQL Packager
نکته : در حین ایجاد دیتابیس مسیر نباید در درایوی انتخاب بشه که فشردگی فایل ها و پوشه ها رو براش انتخاب کردین اگر مشکلی داشت اطلاع بدین تا پاسخ بدم
موفق باشید