ورود

View Full Version : ثبت اطلاعات در بانك sql2000



saeed razaee
شنبه 30 شهریور 1387, 09:16 صبح
با سلام

من يك ديتابيس دارم به اسم peshnahad يك تيبل داريم به اسم vahedsazman و دو فيلد دارم به اسمهاي cod_vahed,nam_vahed حال يك فرم دارم و دوتا تكس باكس روي آن قرار دادم و يك باتن به اسم ذخيره و كدهاي زير را نوشتم اما به تيبل من در ديتابيس اطلاعات فرستاده نمي شود مشكل كدهاي زير چيست لطفا راهنمائي نمائيد.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace peshnahad
{
public partial class Form2 : Form
{
SqlConnection objConnection = new SqlConnection("Server = ROSTAMPOUR;database=peshnahad;Integrated Security=True");
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
DataSet obgDataset = new DataSet();
public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConnection;
objCommand.CommandText = "INSERT INTO vahedsazman" + "(cod_vahed,nam_vahed)" +
"VALUSE@cod_vahed,@nam_vahed)";
objCommand.Parameters.AddWithValue("@cod_vahed", textBox1.Text);
objCommand.Parameters.AddWithValue("@nam_vahed", textBox2.Text);
}
}

}

سار
شنبه 30 شهریور 1387, 10:32 صبح
اولن از تگ کد استفاده کنید
دومن نه کانکشن رو باز کردید و نه کامند رو ران کردید، انتظار دارید کار خاصی انجام بشه؟!

objCommand.ExecuteNoneQuery
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.a spx

elshan_nejad
شنبه 30 شهریور 1387, 11:07 صبح
سلام
حق با دوستمون سار
به غير از اين موارد VALUSE را هم بايد بيرون پارانتز بزاري مثل كد زير


private void button1_Click(object sender, EventArgs e)
{
SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConnection;
try
{
if (objConnection.State == ConnectionState.Closed)
objConnection.Open();
objCommand.CommandText = "INSERT INTO vahedsazman"
+ "(cod_vahed,nam_vahed) " +"VALUES (@cod_vahed,@nam_vahed)";
objCommand.Parameters.AddWithValue("@cod_vahed", textBox1.Text);
objCommand.Parameters.AddWithValue("@nam_vahed", textBox2.Text);
objCommand.ExecuteNonQuery();
objConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}




در ضمن سعي كن از try و catch استفاده كني تا وقتي Exception به وجود مي آد بتوني راحت شناسايش كني

saeed razaee
شنبه 30 شهریور 1387, 12:25 عصر
با سلام آقا دست شما درد نكند
در حال حاضر من در فرم ديگري اطلاعات همان دو فيلد را با DataGridViewنمايش مي دهم اما بعد از ثبت اطلاعات در فرم اول فرم دوم را بايد ببندم و باز كنم تا اطلاعات ثبت شده را مشاهده كنم و آپديت شود براي اينكه بعد از هر بار ثبت اطلاعات در فرم نخواهم فرم را ببندم و باز كنم از چه كدي استفاده كنم .در ثاني در فرم ثبت اطلاعات وقتي بر روي دكمه ذخيره اطلاعات مي زنم مي خواهم مجدد باكسها خالي شود براي ثبت اطلاعات جديد براي اين كار چه كار انجام دهم .

elshan_nejad
شنبه 30 شهریور 1387, 15:40 عصر
در مورد موضوع اول اگه فرم اولي از داخل فرم دوم باز مي شه مي توني يه تابع براي ست كردن گريد بنويسي و فرم اولو ShowDialog باز بكني و تابع ست تو زير اين خط فراخواني كني


Form1 ftest = newForm1();
ftest.ShowDialog();
SetDataGridWiev();

اما اگه اينطوري نيست تابع ستي كه نوشتي رو public static تعريف كن و توي
Event closed يا leave فرم اولي اونو فراخوني كن


Form2.SetDataGridWiev();

در مورد موضوع دوم يه دكمه Save&New توي فرمت بزار و با تغيير جزيي توي كد Event Click دكمه قبليت مي توني به اين هدف برسي


privatevoid Save_and_New_Click(object sender, EventArgs e)
{
SqlCommand objCommand = newSqlCommand();
objCommand.Connection = objConnection;
try
{
if (objConnection.State == ConnectionState.Closed)
objConnection.Open();
objCommand.CommandText = "INSERT INTO vahedsazman"
+ "(cod_vahed,nam_vahed) " + "VALUES (@cod_vahed,@nam_vahed)";
objCommand.Parameters.AddWithValue("@cod_vahed", textBox1.Text);
objCommand.Parameters.AddWithValue("@nam_vahed", textBox2.Text);
objCommand.ExecuteNonQuery();
textBox1.Clear();
textBox2.Clear();
textBox1.Focus();
objConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

saeed razaee
یک شنبه 31 شهریور 1387, 08:12 صبح
با سلام
آقا خيلي ممنون
من براي نمايش اطلاعات در DataGridViewاز دستورات زير استفاده مي كنم و در شكل پيوست نيز مشخص است در اين فرم براي ثبت اطلاعات از فرم دومي استفاده مي كردم كه دوستان راهنمائي فرمودند تكميل شد . حال اگر بخواهم براي ثبت اطلاعات در همان فرمي كه اطلاعات را نمايش مي دهم به صورت شكل پيوست يعني براي ثبت از فرم دومي استفاده نكنم و در همان فرم اطلاعات را ثبت كنم و بعد از زدن دكمه ذخيره اطلاعات در سمن راست در همان فرم نمايش داده شود به چه صورت عمل كنم .


نمايش اطلاعات در DataGridView



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;

namespace peshnahad
{
public partial class Form1 : Form
{
SqlConnection objConnection = new SqlConnection("Server =ROSTAMPOUR;database=peshnahad;Integrated Security=True");
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
DataSet obgDataset = new DataSet();

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText =
"SELECT cod_vahed,nam_vahed" + " FROM vahedsazman";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;
objConnection.Open();
objDataAdapter.Fill(obgDataset, "vahedsazman");
objConnection.Close();
grdAuthorTitle.AutoGenerateColumns = true;
grdAuthorTitle.DataSource = obgDataset;
grdAuthorTitle.DataMember = "vahedsazman";

DataGridViewCellStyle objAlignRightCellStyle = new DataGridViewCellStyle();
objAlignRightCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
grdAuthorTitle.Columns["nam_vahed"].HeaderCell.Style = objAlignRightCellStyle;
grdAuthorTitle.Columns["cod_vahed"].HeaderCell.Style = objAlignRightCellStyle;
grdAuthorTitle.Columns[0].Width = 80;
grdAuthorTitle.Columns[1].Width = 255;

DataGridViewCellStyle objAlternatingCellStyle = new DataGridViewCellStyle();
objAlternatingCellStyle.BackColor = Color.LightBlue;
grdAuthorTitle.AlternatingRowsDefaultCellStyle = objAlternatingCellStyle;

grdAuthorTitle.Columns[0].HeaderText = "كد واحد ";
grdAuthorTitle.Columns[1].HeaderText = "نام واحد سازماني ";
objDataAdapter = null;
objConnection = null;

}

elshan_nejad
یک شنبه 31 شهریور 1387, 13:55 عصر
مي توني يه تابع بسازي كه كدش قسمتي از Form1_Load است


private void setGridDataSource()
{
objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "SELECT cod_vahed,nam_vahed" + " FROM vahedsazman";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;
objConnection.Open();
objDataAdapter.Fill(obgDataset, "vahedsazman");
objConnection.Close();
grdAuthorTitle.DataSource = obgDataset;
grdAuthorTitle.DataMember = "vahedsazman";
}

بعد اين تابع رو به عنوان آخرين دستور در try دكمه Save فراخواني كن


privatevoid Save_and_New_Click(object sender, EventArgs e)
{
SqlCommand objCommand = newSqlCommand();
objCommand.Connection = objConnection;
try
{
if (objConnection.State == ConnectionState.Closed)
objConnection.Open();
objCommand.CommandText = "INSERT INTO vahedsazman"
+ "(cod_vahed,nam_vahed) " + "VALUES (@cod_vahed,@nam_vahed)";
objCommand.Parameters.AddWithValue("@cod_vahed", textBox1.Text);
objCommand.Parameters.AddWithValue("@nam_vahed", textBox2.Text);
objCommand.ExecuteNonQuery();
textBox1.Clear();
textBox2.Clear();
textBox1.Focus();
objConnection.Close();
setGridDataSource();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

saeed razaee
یک شنبه 31 شهریور 1387, 14:46 عصر
دوست عزيز سلام
من همه اين كارها را مي خواهم روي يك فرم انجام دهم يعني هم نمايش در سمت راست و هم ثبت اطلاعات در سمت چپ مانند شكل پيوست كه با يك خطا نمايش داده شده روي آن مشخص است.كدهاي من به شكل زير است در صورت امكان همين كدها را اصلاح فرمائيد.
در بخش نمايش كه مشكلي ندارم فقط مي خواهم همزمان با زدن دكمه ذخيره در سمت چپ اطلاعات بعد از ذخيره شدن در ديتابيس در سمت راست نمايش داده شود.نام دكمه ذخيره در برنامه btnsave مي باشد.در حال حاضر من براي ثبت اطلاعات از فرم دومي استفاده مي كنم كه مشكلي ندارد.مي خواهم همه كارها اعم از ثبت و نمايش داخل يك فرم باشد كه كد آن در زير آمده است.با تشكر فراوان

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;

namespace peshnahad
{
public partial class Form1 : Form
{
SqlConnection objConnection = new SqlConnection("Server =ROSTAMPOUR;database=peshnahad;Integrated Security=True");
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
DataSet obgDataset = new DataSet();

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText =
"SELECT cod_vahed,nam_vahed" + " FROM vahedsazman";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;
objConnection.Open();
objDataAdapter.Fill(obgDataset, "vahedsazman");
objConnection.Close();
grdAuthorTitle.AutoGenerateColumns = true;
grdAuthorTitle.DataSource = obgDataset;
grdAuthorTitle.DataMember = "vahedsazman";

DataGridViewCellStyle objAlignRightCellStyle = new DataGridViewCellStyle();
objAlignRightCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
grdAuthorTitle.Columns["nam_vahed"].HeaderCell.Style = objAlignRightCellStyle;
grdAuthorTitle.Columns["cod_vahed"].HeaderCell.Style = objAlignRightCellStyle;
grdAuthorTitle.Columns[0].Width = 80;
grdAuthorTitle.Columns[1].Width = 255;

DataGridViewCellStyle objAlternatingCellStyle = new DataGridViewCellStyle();
objAlternatingCellStyle.BackColor = Color.LightBlue;
grdAuthorTitle.AlternatingRowsDefaultCellStyle = objAlternatingCellStyle;

grdAuthorTitle.Columns[0].HeaderText = "كد واحد ";
grdAuthorTitle.Columns[1].HeaderText = "نام واحد سازماني ";
objDataAdapter = null;
objConnection = null;


}

private void button1_Click_1(object sender, EventArgs e)
{
Form objForm = new Form2();
objForm.Show();
}

private void button3_Click_1(object sender, EventArgs e)
{
Form objform = new Form3();
objform.Show();
}

private void btnsave_Click(object sender, EventArgs e)
{
SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConnection;
{
try
{
if (objConnection.State == ConnectionState.Closed)
objConnection.Open();
objCommand.CommandText = "INSERT INTO vahedsazman" + "(cod_vahed,nam_vahed)" +
"VALUES(@cod_vahed,@nam_vahed)";
objCommand.Parameters.AddWithValue("@cod_vahed", textBox1.Text);
objCommand.Parameters.AddWithValue("@nam_vahed", textBox2.Text);
objCommand.ExecuteNonQuery();
textBox1.Clear();
textBox2.Clear();
textBox1.Focus();
objConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}




}
}
}

elshan_nejad
یک شنبه 31 شهریور 1387, 16:25 عصر
اروري كه داده به خاطر اينه كه شما موقع لود فرم بعد پر كردن DataGridView مقدار objConnection رو null ميكني اگه شما به جاي فرم لود كد زيرو كپي كنيد


private void Form1_Load(object sender, EventArgs e)
{
setGridDataSource();
DataGridViewCellStyle objAlignRightCellStyle = new DataGridViewCellStyle();
objAlignRightCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
grdAuthorTitle.Columns["nam_vahed"].HeaderCell.Style = objAlignRightCellStyle;
grdAuthorTitle.Columns["cod_vahed"].HeaderCell.Style = objAlignRightCellStyle;
grdAuthorTitle.Columns[0].Width = 80;
grdAuthorTitle.Columns[1].Width = 255;
DataGridViewCellStyle objAlternatingCellStyle = new DataGridViewCellStyle();
objAlternatingCellStyle.BackColor = Color.LightBlue;
grdAuthorTitle.AlternatingRowsDefaultCellStyle = objAlternatingCellStyle;
grdAuthorTitle.Columns[0].HeaderText = "è§يں¥§ ";
grdAuthorTitle.Columns[1].HeaderText = "ëںêيں¥§«ںھêںëï ";

دقت كنيد كه وظيفه ست كردن DataGridView به يك تابع داده شده و دو خط آخر كدت هم داخل اين Event حذف شده
حالا دكمه event دكمت و با كد زير جايگذين كن


private void btnsave_Click(object sender, EventArgs e)
{
SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConnection;
try
{
if (objConnection.State == ConnectionState.Closed)
objConnection.Open();
objCommand.CommandText = "INSERT INTO vahedsazman"
+ "(cod_vahed,nam_vahed) " + "VALUES (@cod_vahed,@nam_vahed)";
objCommand.Parameters.AddWithValue("@cod_vahed", textBox1.Text);
objCommand.Parameters.AddWithValue("@nam_vahed", textBox2.Text);
objCommand.ExecuteNonQuery();
textBox1.Clear();
textBox2.Clear();
textBox1.Focus();
objConnection.Close();
setGridDataSource();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void setGridDataSource()
{
objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "SELECT cod_vahed,nam_vahed" + " FROM vahedsazman";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;
objConnection.Open();
objDataAdapter.Fill(obgDataset, "vahedsazman");
objConnection.Close();
grdAuthorTitle.DataSource = obgDataset;
grdAuthorTitle.DataMember = "vahedsazman";
}

من امتحان كردم اينم نتيجه

saeed razaee
سه شنبه 02 مهر 1387, 09:35 صبح
با سلام و با تشكر فراوان از راهنمائي هاي شما دوست عزيز
عرضم به حضور شما من نه دانشجوي نرم افزار هستم و نه كاري كه انجام مي شود براي پروژه مي خواهم فقط از روي علاقه اي كه دارم اين كار را شروع كرده اهم .چند سالي با access كار مي كردم و امسال كار به #c را شروع كرده ام و هر روز وقتي زيادي روي يادگيري و مطالعه مي گذارم . روي اين فرم مرحله اضافه كردن اطلاعات به پايان رسيد و دوست دارم حذف -ويرايش -جستجو را روي يك فرم با راهنمائي شما دوستان عزيز انجام دهيم و در اين مرحله مي خواهم وقتي يك سطر از DataGridView را انتخاب كرديم مانند شكل پيوست و دكمه ويرايش را زديم اطلاعات اين سطر را مجدداً در باكسهايي كه براي اضافه كردن روي فرم گذاشته بوديم نمايش دهد تا بتوان ويرايش احتمالي روي هر يك از سطرها را انجام داد.

saeed razaee
سه شنبه 02 مهر 1387, 14:56 عصر
elshan_nejad عزيز خسته نباشيد
قبل از به جواب رسيدن سوال قبل يك سوال ديگه پيش آمد كه در حال حاضر در فرمهاي فوق وقتي يك واحد را اضافه مي كنم در DataGridView دو تا نمايش مي دهد . مثلاً از كد يك تا 13 را وارد كردم و از كد يك تا 13 را دوبار نمايش مي دهم.يكبار از يك تا 13 و در ادامه دوباره از يك تا 13 نمايش داده مي شود و اگر 14 را وارد كنم باز دوبار نمايش داده مي شود