PDA

View Full Version : مبتدی: دستور insert در sql



farzane3003
چهارشنبه 30 تیر 1395, 11:35 صبح
با سلام دوباره
من میخوام در دیتابیس sql ثبت اطلاعات کنم.که این اطلاعات رو از تکست باکس های روی فرم میگیره.به sql کانکت شدم و اطلاعاتم رو نشون میده ولی نمیدونم دستور درج رو بنویسم.

DataSet ds1;

System.Data.SqlClient.SqlConnection con;
System.Data.SqlClient.SqlDataAdapter da;




private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'dbtstDataSet.dbtstper' table. You can move, or remove it, as needed.


this.dbtstperTableAdapter.Fill(this.dbtstDataSet.d btstper);


con = new System.Data.SqlClient.SqlConnection();
ds1 = new DataSet();


con.ConnectionString = "Data Source=.;Initial Catalog=dbtst;Integrated Security=True";
con.Open();
/* MessageBox.Show("open");*/
string sql = "SELECT * From dbtstper";
da = new System.Data.SqlClient.SqlDataAdapter(sql, con);


con.Close();
/* MessageBox.Show("close");*/


}

این دستور کانکتمه.دستور درج رو هیچ آگاهی ندارم.راهنمایی کنید لطفا.ادر تاپیک های تالار نگاه کردم ولی چیزی سر در نیاوردم.

aryadev
چهارشنبه 30 تیر 1395, 12:05 عصر
con=connectionstring= "Data Source=.;Initial Catalog=dbtst;Integrated Security=True"; دستور کانکشن برای درج ما یک کوئری داریم به نام command که اینطوری میشه sqlcommand com=new sqlcommand; com.command="دستور اینسرت" com.excutenonequery();

mrprestige
چهارشنبه 30 تیر 1395, 18:17 عصر
سلام وقتتون بخیر ، طبق فرمایش دوست خوبمون aryadev (http://barnamenevis.org/member.php?383252-aryadev) شما میتونید از دستور insert استفاده کنید . ولی به این روش جدول شما دچار حمله SQL Injection نمیشه . به عنوان مثال داخل یک Button این کد رو مینویسید

Var cn=new Sqlconnection(" Data Source=.;Initial Catalog=dbtst;Integrated Security=True ");
cn.open();
var cm=new Sqlcommand("Insert into Table1(ID,Name)Values(@ID,@Name)",cn);
cm.Parameters.Addwithvalue("@ID",Convert.Toint32(Textbox1.text));
cm.Parameters.Addwithvalue("@Name",Textbox2.text);
cm.ExecuteNonQurey();
cn.Close();

توی این مثالی که برات زدم اگه دقت کنی در تعریف SqlCommand کلمه Table1 رو میبینی که منظورم همون نام جدولتون بود که توی این قسمت وارد میکنید و داخل پرانتز من دو فیلد ID و Name رو قرار دادم برای مثال که بگم اگر نوع فیلد هاتون متفاوت بود (int یا Text یا .... ) در ادامه برنامه چطور اون ها رو معرفی کنید و همچنین بعد از بکاربردن عبارت Values یک علامت @ و بعد نام فیلد اول همینطور به ترتیب و درنهایت بعد قرار دادن علامت کاما متغییر SqlConnectionتون وارد میکنی و در قسمت پارامتر ها ( Parameters ) هم توی پرانتز هم اول نام اولین متغییری که وارد کردید رو داجل دو دابل کوتیشن مینویسید و سپس بعد از کاما نام کنترلی که حکم ورودی اطلاعاتتون رو داره رو مینویسید که من اینجا چون فیلد ID من از نوع int بود باید کنترل Textbox1 رو تبدیل میکردم به int و همینطور برای برای متغییر های بعدی همن روش رو بکار میگیرید اگه دقت کنید میبینید که من برای پارامتر بعدیم از Convert استفاده نکردم چون فیلدNameمن از نوع رشته بود و لزومی نداشت که من اون رو تبدیل کنم و در آخر هم که cm رو Executenonquery میکنید و کانکشن رو میبندید . به این روش میگن Data Command های پارامتر دار.

باز اگه به مشکلی برخوردید پاسخ میدم .

پیروز و موق باشید .

farzane3003
پنج شنبه 31 تیر 1395, 16:06 عصر
سلام وقتتون بخیر ، طبق فرمایش دوست خوبمون aryadev (http://barnamenevis.org/member.php?383252-aryadev) شما میتونید از دستور insert استفاده کنید . ولی به این روش جدول شما دچار حمله SQL Injection نمیشه . به عنوان مثال داخل یک Button این کد رو مینویسید

Var cn=new Sqlconnection(" Data Source=.;Initial Catalog=dbtst;Integrated Security=True ");
cn.open();
var cm=new Sqlcommand("Insert into Table1(ID,Name)Values(@ID,@Name)",cn);
cm.Parameters.Addwithvalue("@ID",Convert.Toint32(Textbox1.text));
cm.Parameters.Addwithvalue("@Name",Textbox2.text);
cm.ExecuteNonQurey();
cn.Close();

توی این مثالی که برات زدم اگه دقت کنی در تعریف SqlCommand کلمه Table1 رو میبینی که منظورم همون نام جدولتون بود که توی این قسمت وارد میکنید و داخل پرانتز من دو فیلد ID و Name رو قرار دادم برای مثال که بگم اگر نوع فیلد هاتون متفاوت بود (int یا Text یا .... ) در ادامه برنامه چطور اون ها رو معرفی کنید و همچنین بعد از بکاربردن عبارت Values یک علامت @ و بعد نام فیلد اول همینطور به ترتیب و درنهایت بعد قرار دادن علامت کاما متغییر SqlConnectionتون وارد میکنی و در قسمت پارامتر ها ( Parameters ) هم توی پرانتز هم اول نام اولین متغییری که وارد کردید رو داجل دو دابل کوتیشن مینویسید و سپس بعد از کاما نام کنترلی که حکم ورودی اطلاعاتتون رو داره رو مینویسید که من اینجا چون فیلد ID من از نوع int بود باید کنترل Textbox1 رو تبدیل میکردم به int و همینطور برای برای متغییر های بعدی همن روش رو بکار میگیرید اگه دقت کنید میبینید که من برای پارامتر بعدیم از Convert استفاده نکردم چون فیلدNameمن از نوع رشته بود و لزومی نداشت که من اون رو تبدیل کنم و در آخر هم که cm رو Executenonquery میکنید و کانکشن رو میبندید . به این روش میگن Data Command های پارامتر دار.

باز اگه به مشکلی برخوردید پاسخ میدم .

پیروز و موق باشید .




خیلی خیلی ممنونم واقعا بدردم خورد.
شرمنده ی سوال دیگه ام دارم: فیلد date در sql تعریف کردم در دستور insert که گفتین چه طوری با ید تعریفش کنم؟ یعنی مثل int اول باید convert بشه؟؟
البته با حالت text نوشتم خطا نمیده و ثبت نمیکنه. این استاندارده؟

aryadev
پنج شنبه 31 تیر 1395, 17:22 عصر
خیر شما می تونید که کدتون را بزارید توی مسیج باکس ببینید در هنگام ذخیره چه خطایی میده . اگر true برگردوند که درسته در غیر اینصورت ارورشو بگید تا راهنماییتون کنم

mrprestige
پنج شنبه 31 تیر 1395, 20:59 عصر
خیلی خیلی ممنونم واقعا بدردم خورد.
شرمنده ی سوال دیگه ام دارم: فیلد date در sql تعریف کردم در دستور insert که گفتین چه طوری با ید تعریفش کنم؟ یعنی مثل int اول باید convert بشه؟؟
البته با حالت text نوشتم خطا نمیده و ثبت نمیکنه. این استاندارده؟

با عرض سلام مجدد و اینکه خواهش میکنم کاری نکردم . اولا که از دوستمون aryadev (http://barnamenevis.org/member.php?383252-aryadev) عذر میخوام ولی این دوستمون اشتباه میکنن و جا داره به این دوست عزیزم بگم که روشتون اصولی نیست . مسئله دوم اینکه شما باز میتونید از Convert استفاده کنید ( فقط یادتون نره که فیلد تاریخ توی پایگاهتون حتما از نوع Date باشه ) بعد کدتون رو به این صورت که براتون نوشتم تغییر بدید ( البته باز راه های دیگه ای هم بود که من یک موردش رو براتون مثال زدم که فکر نکنید با Convert امکان پذیر نیست)

Var cn=new Sqlconnection(" Connection String ");
cn.open();
var cm=new Sqlcommand("Insert into Table1(ID,Name,Tarikh)Values(@ID,@Name,@Tarikh)",cn);
cm.Parameters.Addwithvalue("@ID",Convert.Toint32(Textbox1.text));
cm.Parameters.Addwithvalue("@Name",Textbox2.text);
cm.Parameters.AddWithValue("@Tarikh", Convert.ToDateTime(textBox3.Text).ToString("dd-MMM-yyyy"));
cm.ExecuteNonQurey();
cn.Close();

باز سوالی براتون پیش اومد بنده و باقی دوستان پاسخگو هستیم .

پیروز و موفق باشید

از کدنویسی لذت ببرید

farzane3003
جمعه 01 مرداد 1395, 12:29 عصر
خیر شما می تونید که کدتون را بزارید توی مسیج باکس ببینید در هنگام ذخیره چه خطایی میده . اگر true برگردوند که درسته در غیر اینصورت ارورشو بگید تا راهنماییتون کنم
ممنون خطاش برطرف شد.

farzane3003
دوشنبه 04 مرداد 1395, 13:59 عصر
با عرض سلام مجدد و اینکه خواهش میکنم کاری نکردم . اولا که از دوستمون aryadev (http://barnamenevis.org/member.php?383252-aryadev) عذر میخوام ولی این دوستمون اشتباه میکنن و جا داره به این دوست عزیزم بگم که روشتون اصولی نیست . مسئله دوم اینکه شما باز میتونید از Convert استفاده کنید ( فقط یادتون نره که فیلد تاریخ توی پایگاهتون حتما از نوع Date باشه ) بعد کدتون رو به این صورت که براتون نوشتم تغییر بدید ( البته باز راه های دیگه ای هم بود که من یک موردش رو براتون مثال زدم که فکر نکنید با Convert امکان پذیر نیست)

Var cn=new Sqlconnection(" Connection String ");
cn.open();
var cm=new Sqlcommand("Insert into Table1(ID,Name,Tarikh)Values(@ID,@Name,@Tarikh)",cn);
cm.Parameters.Addwithvalue("@ID",Convert.Toint32(Textbox1.text));
cm.Parameters.Addwithvalue("@Name",Textbox2.text);
cm.Parameters.AddWithValue("@Tarikh", Convert.ToDateTime(textBox3.Text).ToString("dd-MMM-yyyy"));
cm.ExecuteNonQurey();
cn.Close();

باز سوالی براتون پیش اومد بنده و باقی دوستان پاسخگو هستیم .

پیروز و موفق باشید

از کدنویسی لذت ببرید
سلام ممنون از کمکتون.
بعد از ثبت کردن دیتا گرید ویو آپدیت نمیشه و نمایش نمیده.چه کدی باید بنویسم؟


من این کدو گزاشتم ولی خطا میگیره که نمیتونه tabels پیدا کنه...
dataGridView1.DataSource = ds1.Tables[0];

mrprestige
دوشنبه 04 مرداد 1395, 15:33 عصر
سلام وقتتون بخیر ، و اینکه خواهش میکنم .
شما کافیه ادامه همین کدهایی که براتون نوشتم ( با فرض اینکه دیتاگرید شما در Form1 هست ) اینطوری مینویسید

Form1_Load (null, null);

این کد Form1 شما رو مجددا صدا میزنه یه جور مثل رفرش .

پیروز موفق باشید