PDA

View Full Version : سوال: ایجاد دیتابیس SQL به وسیله کد



saber_ershadi
یک شنبه 22 بهمن 1391, 12:07 عصر
سلام

میخواستم بدونم میشه به وسیله نوشتن کد در C#‎ بشه خود DataBase رو ایجاد کرد ؟
من یکم کار کردم نتونستم ولی میشه جداول رو به وسیله کد درست کرد مثلا

create table moshtari(name varchar(50) primary key,family varchar(50))

ولی وقتی می خوام کد ایجاد DataBase رو بزنم ایراد میگیره و اجرا نمیشه
چیکار کنم ؟

saber_ershadi
یک شنبه 22 بهمن 1391, 12:13 عصر
این متد اجرا دستور

public static bool ExcuteSQL(string sql)
{
try
{
SqlConnection con = new SqlConnection();
con.ConnectionString = constr;
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = sql;
cmd.Connection = con;
cmd.ExecuteNonQuery();
return true;
}
catch
{
return false;
}
}


و اینم کد ایجاد جدول


string sql = "create table service (sh_p varchar(50),s_h varchar(50),t_h varchar(50),keraye varchar(50),s_b varchar(50),t_b varchar(50),code_esh varchar(50),addres varchar(50),radif bigint IDENTITY)";
database.ExcuteSQL(sql)

saber_ershadi
یک شنبه 22 بهمن 1391, 16:09 عصر
خوب دوستان باید چیکار کنم ؟

josh simpson
یک شنبه 22 بهمن 1391, 16:42 عصر
سلام

میخواستم بدونم میشه به وسیله نوشتن کد در C#‎‎‎‎‎‎ بشه خود DataBase رو ایجاد کرد ؟
من یکم کار کردم نتونستم ولی میشه جداول رو به وسیله کد درست کرد مثلا

create table moshtari(name varchar(50) primary key,family varchar(50))

ولی وقتی می خوام کد ایجاد DataBase رو بزنم ایراد میگیره و اجرا نمیشه
چیکار کنم ؟
برای ایجاد دیتابیس باید در سطح بالاتری از خود دیتابیس ها باشید پس نباید در کانکشن استرینگ Initial Catalog رو تعیین کنید.
در کد زیر یک دیتابیس در درایو d ساخته می شه و سپس در اون دیتابیس یک جدول ایجاد می شه.



public void CreateDB()
{
//create DB
sqlConnection.ConnectionString = ("Data Source=serverName;Integrated security=true");
string dataBase = "CREATE DATABASE Hesabdari ON PRIMARY (NAME = Hesabdari, FILENAME = 'd:\\Hesabdari.mdf',SIZE = 3MB) LOG ON (NAME = Hesabdari_log, FILENAME = 'd:\\Hesabdari_log.ldf', SIZE = 1MB)";
cmd.CommandText = dataBase;
try
{
sqlConnection.Open();
cmd.ExecuteNonQuery();
sqlConnection.Close();
}
catch (Exception)
{
}
//
//create Table
sqlConnection.ConnectionString = "Data Source=serverName ;Initial Catalog=Hesabdari; Integrated Security=True";

cmd.CommandText = "CREATE Table TbLogin ([UserName] [varchar](100) NOT NULL,[PassWord] [varchar](100) NOT NULL,[pic] [image],[No] [varchar](1),[Savepass] [varchar](1), CONSTRAINT [PK_TB_Login] PRIMARY KEY CLUSTERED ([UserName] ASC) ON [PRIMARY]) ; ";

try
{
sqlConnection.Open();
cmd.ExecuteNonQuery();
sqlConnection.Close();
}
catch (Exception)
{ }
}

csharpdoost
یک شنبه 22 بهمن 1391, 18:35 عصر
بنده هم تا حالا بصورت ویزاردی به بانک وصل میشدم. حالا میخوام این شیوه (کدنویسی)رو هم امتحان کنم. حالا یه سوال از کد بالا: sqlConnection رو کجا و چطوری تعریف کردید؟

saber_ershadi
یک شنبه 22 بهمن 1391, 22:28 عصر
کد شما البته با تغییر خیلی کم رو امتحان کردم جواب نداد این بود :


public void CreateDB()
{
//create DB
SqlConnection constr=new SqlConnection();
constr.ConnectionString = @"Data Source=ERSHADI-25FCB11\SQLEXPRESS;Integrated security=true";
SqlCommand cmd=new SqlCommand();
string dataBase = "CREATE DATABASE Hesabdari ON PRIMARY (NAME = Hesabdari, FILENAME = 'd:\\Hesabdari.mdf',SIZE = 3MB) LOG ON (NAME = Hesabdari_log, FILENAME = 'd:\\Hesabdari_log.ldf', SIZE = 1MB)";
cmd.CommandText = dataBase;
try
{
constr.Open();
cmd.ExecuteNonQuery();
constr.Close();
MessageBox.Show("succiful");
}
catch (Exception)
{
MessageBox.Show("Error");
}

و تابع رو تو یه دکمه فرا خوانی کردم

اشکال کار از کجاست ؟

saber_ershadi
یک شنبه 22 بهمن 1391, 22:40 عصر
بنده هم تا حالا بصورت ویزاردی به بانک وصل میشدم. حالا میخوام این شیوه (کدنویسی)رو هم امتحان کنم. حالا یه سوال از کد بالا: sqlConnection رو کجا و چطوری تعریف کردید؟

sqlConnection کلاسی هست کارش برقراری ارتباط بین برنامه کاربردی و سرویس دهنده بانک اطلاعاتیه ،ابتدا باید تو قسمت یوزینگ using System.Data.sqlclient; رو تعریف کنی تا بتونی از کسلاس هاش استفاده کنی وبعد باید نمونه ای از sqlConnection درست کنی و پارامترهای اونو مقدار دهی کنی مثل مسیر بانک ،امنیتش و غیره

csharpdoost
دوشنبه 23 بهمن 1391, 12:26 عصر
SqlConnection sqlconnection = new SqlConnection("server=local;DataBase=testSQLConnection;User" + " ID=DARMAN;Password=123;");
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlconnection;
cmd.CommandText = "INSERT INTO authors " +
"(au_id, au_lname, au_fname, contract) " +
"VALUES(@au_id, @au_lname, @au_fname, @au_contract)";
cmd.Parameters.AddWithValue("@au_id", txtAuId.Text);
cmd.Parameters.AddWithValue("@au_lname",txtLastName.Text);
cmd.Parameters.AddWithValue("@au_fname", txtFirstName.Text);
cmd.Parameters.AddWithValue("@au_contract", chkContract.Checked);
sqlconnection.Open();
cmd.ExecuteNonQuery();
sqlconnection.Close();

در کد بالا موقع open خطا میده. نمیدونم چرا؟ serverName= DARMAN و پسوردش هم :123 که همون پسورد admin ویندوزه.

josh simpson
دوشنبه 23 بهمن 1391, 13:06 عصر
در کد بالا موقع open خطا میده. نمیدونم چرا؟ serverName= DARMAN و پسوردش هم :123 که همون پسورد admin ویندوزه.
زمان اتصال به sql اگه به کامپیوتر لوکالتون می خواین وصل بشید باید از Integrated security=true استفاده کنید و اگر به کامپیوتری در شبکه می خواین وصل بشید باید در قسمت Data Source آی پی و پورت کامپیوتر مورد نظر رو به صورت 192.168.5.5:2047 وارد کنید و به جای Integrated security=true باید نام و پسورد یک کاربر که در داخل خود SQL تعریف شده مثل کاربر SA که در حالت عادی غیر فعال است رو وارد نمایید نه این که نام کاربر ویندوز رو وارد کنید.

csharpdoost
دوشنبه 23 بهمن 1391, 14:09 عصر
زمان اتصال به sql اگه به کامپیوتر لوکالتون می خواین وصل بشید باید از Integrated security=true استفاده کنید و اگر به کامپیوتری در شبکه می خواین وصل بشید باید در قسمت Data Source آی پی و پورت کامپیوتر مورد نظر رو به صورت 192.168.5.5:2047 وارد کنید و به جای Integrated security=true باید نام و پسورد یک کاربر که در داخل خود SQL تعریف شده مثل کاربر SA که در حالت عادی غیر فعال است رو وارد نمایید نه این که نام کاربر ویندوز رو وارد کنید.
دوستان ببخشید ببینم بالاخره موفق میشم به روش کد با sql ارتباط برقرار کنم یا نه؟

1-کامپیوتر من local هستش و ID , PASS ویندوز با ID , PASS ، اس کیو ال یکیه. چون موقع نصب SQL برای یوزر: curent user رو با همون پسورد ویندوز به sql هم دادم . حالا برای تغییر این یوزر و پسورد sql چیکار باید بکنم؟
2- مگر server name همون ID نیستش؟
3- Integrated security=true را اضافه کردم هم با یوزر وپسورد و هم بدون یوزر و پسورد باز هم خطا میده.
4- ترتیب این دستورات مهمه ؟

josh simpson
دوشنبه 23 بهمن 1391, 17:13 عصر
کد شما البته با تغییر خیلی کم رو امتحان کردم جواب نداد این بود :
و تابع رو تو یه دکمه فرا خوانی کردم

اشکال کار از کجاست ؟

دیتابیس رو داخل یک پوشه ایجاد کنید چون در بعضی موارد امکان ایجاد دیتابیس در ریشه درایو وجود نداره.

saber_ershadi
دوشنبه 23 بهمن 1391, 20:26 عصر
دوستان منم هستم. چیکار باید کرد ؟

csharpdoost
دوشنبه 23 بهمن 1391, 22:58 عصر
مشکل بنده حل شد. و تونستم توی دیتابیس اطلاعات رو با کدنویسی ثبت کنم . و جواب سوالاتم رو هم پیدا کردم. 1-یوزر و پسورد رو هم وارد نکردی اشکال نداره. 2-سرورنیم همون ای دیه.3- هم با پسورد و هم بدون اون جواب میده 4-ترتیبشون هم مهم نیست

saber_ershadi
سه شنبه 24 بهمن 1391, 09:03 صبح
میشه فقط همین قسمت رو به صورت اجرایی ضمیمه کنید ببینم ؟

csharpdoost
سه شنبه 24 بهمن 1391, 11:04 صبح
میشه فقط همین قسمت رو به صورت اجرایی ضمیمه کنید ببینم ؟
اگه منظورتون با منه بفرما :


SqlConnection sqlconnection = new SqlConnection();
sqlconnection.ConnectionString = "server=localhost;Integrated security=true;database=testSQLConnection";
SqlCommand SqlCommand = new SqlCommand();
SqlCommand.Connection = sqlconnection;

SqlCommand.CommandText = "INSERT INTO authors " + "(au_id, au_lname, au_fname, contract) " +
"VALUES(@au_id, @au_lname, @au_fname, @au_contract)";

SqlCommand.Parameters.AddWithValue("@au_id", txtAuId.Text);
SqlCommand.Parameters.AddWithValue("@au_lname", txtLastName.Text);
SqlCommand.Parameters.AddWithValue("@au_fname", txtFirstName.Text);
SqlCommand.Parameters.AddWithValue("@au_contract", chkContract.Checked);

sqlconnection.Open();
SqlCommand.ExecuteNonQuery();
sqlconnection.Close();

txtAuId.Text = txtLastName.Text = txtFirstName.Text = "";

saber_ershadi
جمعه 23 فروردین 1392, 19:19 عصر
ممنون از کد
دیتابیس ایجاد میشه حالا چطور دیتا بیس تو خود برنامه SQL Managment نمایش داده بشه نمی خوام فایل تو پوشه یا درایو هایه دیگه مثلا همین D باشه باید مسیر پوشه SQL که برناممون نصبه رو بدم یا روشش جور دیگست ؟

saber_ershadi
جمعه 23 فروردین 1392, 23:03 عصر
دوستان عزیز یه نفر راهنمایی کنه

aslan
شنبه 24 فروردین 1392, 18:18 عصر
نمی خوام فایل تو پوشه یا درایو هایه دیگه مثلا همین D باشه
سلام
دوست عزیز هر دیتابیسی که ( حتی با SqlServer Management ساخته میشه ) ساخته میشه بصورت فایل بر روی هاردتان وجود داره واین جمله تون زیاد مفهوم نیست .

amir200h
شنبه 24 فروردین 1392, 18:40 عصر
فکر کنم بانکتو باید تو شاخه زیر ایجاد کنی

C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA

saber_ershadi
شنبه 24 فروردین 1392, 19:44 عصر
دوست عزیز هر دیتابیسی که ( حتی با SqlServer Management ساخته میشه ) ساخته میشه بصورت فایل بر روی هاردتان وجود داره واین جمله تون زیاد مفهوم نیست .

درسته منظورمو بد رسوندم مثلا دیتابیس های Master و Model و ... رو وقتی SqlServer Managementرو باز میکنی میتونی ببینی یا عکسش اگه با خود VisualStdieo دیتابیس رو بسازیم تو SqlServer Managementنشونش نمیده منظورم این بود


فکر کنم بانکتو باید تو شاخه زیر ایجاد کنی

C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA

یه جورایی میشه ولی اگه مسیر sql نصب شده تو یه درایو دیگه باشه یا تو ویندوز7 فکر کنم باشه Program Files X86 این چطور حل میشه ؟
باید دیتابیس رو بعد از ایجاد Attach کنم به SQL یا کاره دیگه ای ؟

amir200h
شنبه 24 فروردین 1392, 21:11 عصر
بفرما دوست من.
این آدرسو میکشه بیرون.
موفق باشی.

aslan
شنبه 24 فروردین 1392, 21:37 عصر
سلام
این لینک و ببینید :
http://stackoverflow.com/questions/3523989/how-to-use-sqlcommand-to-create-database-with-parameterized-db-name

aslan
شنبه 24 فروردین 1392, 22:41 عصر
و این هم یک موضوع مشابه :
http://barnamenevis.org/showthread.php?393246-attach-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A7%D8%B2-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87