PDA

View Full Version : اخرین رکورد درج شده



clever student
چهارشنبه 25 شهریور 1388, 02:02 صبح
من میخوام بعد ازاینکه کاربر مشخصات کالایی رو درج کرد شناسه رکورد ثبت شده رو
ببینه ممکنه تمام اطلاعاتی که وارد میکنه تکراری باشه به غیر از شناسه که کلید اصلی جدوله
وauto increment
query که مینوسم تو sql جواب میده یعنی شناسه اخرین رکورد درج شده رو میده ولی تو برنامه به خط

label14.Text=dr1["id_invoice"].ToString();

ایراد میگیره
اگه تو query هم max رو ننویسم شناسه اولین رکورد رو میده
(من اخری و میخوام )لطفا راهنمایی کنید



SqlDataReader dr1;
//{
if ((textBox5.Text != "") && (textBox4.Text != "") && (textBox3.Text != "")
&& (comboBox6.Text != "") && (comboBox5.Text != "") && (comboBox4.Text != ""))//&& (!invoice.CurrentRow.IsNewRow)
{

String strsql, strsql1;
string strcon;
strcon = "Data Source=.;Initial Catalog=garner;Integrated Security=True";
con = new SqlConnection(strcon);

if (y == 1)
{
strsql = "insert into invoice(id_method,id_half,fact_import,id_storekeep er,date_invoce,id_transfer,comment)values(1,@id_ha lf,@fact_import,@id_storkeeper,@date_invoice,@id_t ransfer,@comment)";
//if (con.State == System.Data.ConnectionState.Closed)
con.Open();
SqlCommand com1 = new SqlCommand(strsql, con);
com1.Parameters.Add("@id_half", SqlDbType.NVarChar);
com1.Parameters["@id_half"].Value = textBox5.Text;
com1.Parameters.Add("@fact_import", SqlDbType.NVarChar);
com1.Parameters["@fact_import"].Value = textBox1.Text;
com1.Parameters.Add("@id_storkeeper", SqlDbType.NVarChar);
com1.Parameters["@id_storkeeper"].Value = textBox4.Text;
com1.Parameters.Add("@date_invoice", SqlDbType.NVarChar);
com1.Parameters["@date_invoice"].Value = comboBox6.Text + "/" + comboBox5.Text + "/" + comboBox4.Text;
com1.Parameters.Add("@id_transfer", SqlDbType.NVarChar);
com1.Parameters["@id_transfer"].Value = textBox3.Text;
com1.Parameters.Add("@comment", SqlDbType.NVarChar);
com1.Parameters["@comment"].Value = richTextBox1.Text;
com1.ExecuteNonQuery();
//if (con.State == System.Data.ConnectionState.Open)
con.Close();
MessageBox.Show("ثبت اطلاعات با موفقيت انجام شد", "اطلاعات ثبت", MessageBoxButtons.OK, MessageBoxIcon.Information);
pictureBox5.Enabled = false;
}
else
{
strsql1 = "insert into invoice(id_method,id_half,id_storekeeper,date_invo ce,id_transfer,comment)values(2,@id_half,@id_stork eeper,@date_invoice,@id_transfer,@comment)";
//if (con.State == System.Data.ConnectionState.Closed)
con.Open();
SqlCommand com = new SqlCommand(strsql1, con);
com.Parameters.Add("@id_half", SqlDbType.NVarChar);
com.Parameters["@id_half"].Value = textBox5.Text;
com.Parameters.Add("@id_storkeeper", SqlDbType.NVarChar);
com.Parameters["@id_storkeeper"].Value = textBox4.Text;
com.Parameters.Add("@date_invoice", SqlDbType.NVarChar);
com.Parameters["@date_invoice"].Value = comboBox6.Text + "/" + comboBox5.Text + "/" + comboBox4.Text;
com.Parameters.Add("@id_transfer", SqlDbType.NVarChar);
com.Parameters["@id_transfer"].Value = textBox3.Text;
com.Parameters.Add("@comment", SqlDbType.NVarChar);
com.Parameters["@comment"].Value = richTextBox1.Text;
com.ExecuteNonQuery();
//if (con.State == System.Data.ConnectionState.Open)
con.Close();
MessageBox.Show("ثبت اطلاعات با موفقيت انجام شد", "اطلاعات ثبت", MessageBoxButtons.OK, MessageBoxIcon.Information);
pictureBox5.Enabled = false;
}}
string strcon1;
strcon1 = "Data Source=.;Initial Catalog=garner;Integrated Security=True";
SqlConnection con1 = new SqlConnection(strcon1);

string strsql2 = "select max(id_invoice) from invoice";
//if (con1.State == System.Data.ConnectionState.Closed)
con1.Open();
SqlCommand com2 = new SqlCommand(strsql2, con1);
dr1 = com2.ExecuteReader();
if (dr1.Read())
{
//textBox6.Enabled = true;
// textBox6.Text = dr1["id_invoice"].ToString();
label14.Text=dr1["id_invoice"].ToString();
con1.Close();
}

else
MessageBox.Show("لطفا اطلاعات را كنترل كنيد و دوباره سعي كنيد

Mohsen_Fotouhi
چهارشنبه 25 شهریور 1388, 03:01 صبح
سلام دوست عزیر

من از روش زیر استفاده می کنم در (SqlServer ) مسلما بهترین روش نیست ولی کارتو را میندازه

بعد از اجرای ExecuteNonQuery دستور زیر رو اجرا کن



Sqlcommand.commandtext="select @@identity from Table"
Long Num_Ident=Convert.Toint64(Sqlcommand.Executescalar ());


موفق باشید:چشمک:

Royce_Da
چهارشنبه 25 شهریور 1388, 05:35 صبح
دوست عزیز این دستور آخرین رکورد ذخیره شده رو بهت میده



select Top 1 Name,Family,.... from Table_1 order by ID desc


اما اگر برنامت قراره تحت شبکه کار کنه دیگه نباید از این کد استفاده کنی چون ممکنه 2 نفر با هم رکورد اضافه کنن . روش دیگری داره که اگه همینجا یه search کنی پیدا میکنی

در ضمن اگر کل این دستوراتت رو هم داخل یه transaction انجام بدی بهتره