PDA

View Full Version : ؟؟؟ بدست آوردن خودکار شماره ثبت سفارش



mojtaba_kz
دوشنبه 16 مرداد 1391, 01:48 صبح
سلام علیکم

برای بدست آوردن خودکار شماره ثبت سفارش راه حل من این است که میام مقدار اولیه رو بصورت دستی به بانک میدم و بعد در کد نویسی بیشترین و در واقع بزرگترین شماره رو بدست میارم و یک واحد به اون اضافه میکنم و در لیبل و یا تکس باس مربوط قرار میدم

به نظر شما این راحل صحیح می باشد ؟

شما چه راهی رو پیشنهاد میکنید؟

کدی که بنظرم میرسد این است ولی درست کار نمی کند مشکل از کجاست >؟


SqlCommand


cmdd = new SqlCommand();

cmdd.Connection = cnn;



SqlDataAdapter add = new SqlDataAdapter("SELECT max(oid) from outpart", cnn);



DataSet dss = new DataSet();

 

add.Fill(dss,

"outpart");



DataTable dtt = dss.Tables["outpart"];



codesabt.Text =

// inja chi bayad benvisam



cnn.Close();

nilmil_nil
دوشنبه 16 مرداد 1391, 02:06 صبح
با این دستور میتونی شماره آیدی جاری رو بدست بیاری
یعنی فرض کن شماره آخرین سفارش
حالا اونو با 1 جمع کنی شماره جدید بدست میاد
"SELECT IDENT_CURRENT('banks')
البته در صورتی که فیلد آی دی شما AutoNumber باشه

Mahmoud.Afrad
دوشنبه 16 مرداد 1391, 02:13 صبح
با این دستور میتونی شماره آیدی جاری رو بدست بیاری
یعنی فرض کن شماره آخرین سفارش
حالا اونو با 1 جمع کنی شماره جدید بدست میاد
"SELECT IDENT_CURRENT('banks')
البته در صورتی که فیلد آی دی شما AutoNumber باشه
در تکمیل صحبت nilmil_nil (http://barnamenevis.org/member.php?59188-nilmil_nil) : البته به شرطی این گونه روش ها میتونه مفید باشه که برنامه یا بهتر بگم دیتابیس تک کاربره باشه. وگرنه یک مقدار به چند نفر نشون داده میشه که با آیدی که واقعا ثبت میشه متفاوت خواهد بود. پس اگر چندکاربره هست باید بعد از ثبت آیدی بدست بیاد.

Y_Safaiee
دوشنبه 16 مرداد 1391, 02:48 صبح
سلام دوست من

اگر فیلد شما Autonumber نیست میتونین از کدهای زیر استفاده کنید یه سمپل هم برات ضمیمه کردم


using System.Data.SqlClient;
namespace Test
{
public partial class Form1 : Form
{
SqlConnection cnn=new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\Database1.mdf;Integrated Security=True;User Instance=True");
SqlDataAdapter da;
DataTable dt = new DataTable();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)

{

string sql="select max(id)+1 from list";
cnn.Open();

dt.Clear();

SqlCommand cmd = new SqlCommand(sql, cnn);
object max = cmd.ExecuteScalar();

if (max == null || max.ToString() == "") textBox1.Text = "1";
else textBox1.Text = max.ToString();

da =new SqlDataAdapter("select * from list", cnn);
da.Fill(dt);
dataGridView1.DataSource = dt;

cnn.Close();

}

private void button1_Click(object sender, EventArgs e)
{

cnn.Open();
SqlCommand cmd = new SqlCommand("insert into list (id,name) values(@id,@name)",cnn);

cmd.Parameters.Add("@id", long.Parse(textBox1.Text));
cmd.Parameters.Add("@name", textBox2.Text);
cmd.ExecuteNonQuery();

cnn.Close();

Form1_Load(sender, e);

}
}
}


موفق باشی
بایت بایت

ali_habibi1384
دوشنبه 16 مرداد 1391, 02:51 صبح
در صورتيكه برنامه شما تحت شبكه هست كلا نبايد تا زمان ذخيره سازي قطعي اطلاعات چيزي به كاربر نشون داده بشه چون ممكنه اين مقدار به كاربراني كه همزمان با اين كاربر اطلاعات وارد كردند به اونها هم نشون داده بشه و چيزي كه به كاربر نشون داده بشه واقعي نيست.كه اين همون مطلبي هست كه آقاي mafaman2003 (http://barnamenevis.org/member.php?71297-mafaman2003)اشاره كردند.راه درستش هم همونكه فيلد رو autoNumber كني و Max اونو بعنوان فيلد كليد بعد از ذخيره سازي به كاربر نشون بدي.