PDA

View Full Version : سوال: جلوگیری از وارد کردن اطلاعات تکراری در دیتابیس



davidrobert
پنج شنبه 15 فروردین 1392, 17:48 عصر
سلام میخواستم داخل تکس باکس یا کامبو باکس اطلاعات وارد کنم که اگه اطلاعات تکراری بود پیغام بده اطلاعات تکراری و اطلاعات جدید وارد کن
یعنی میخوام شماره سند وارد کنم که در داخل کامبو باکس مقداری رو قرار دادم یعنی از عدد 100 به بالا اگه شماره 100 رو ذخیره کرده بود بره روی شماره 101 تا غیره اگه طرف امد شماره جدید داد یعنی 101 رو کد 100 سیستم پیغام بده این شماره تکراری می باشد ممنون میشم کمک کنید من رو اگه فایلی دارید در اختیار من قرار بدید تا بتوانم در فایل از وارد کردن اطلاعات تکراری جلوگیری کنم با تشکر فراوان.

khokhan
پنج شنبه 15 فروردین 1392, 20:15 عصر
سلام میخواستم داخل تکس باکس یا کامبو باکس اطلاعات وارد کنم که اگه اطلاعات تکراری بود پیغام بده اطلاعات تکراری و اطلاعات جدید وارد کن
یعنی میخوام شماره سند وارد کنم که در داخل کامبو باکس مقداری رو قرار دادم یعنی از عدد 100 به بالا اگه شماره 100 رو ذخیره کرده بود بره روی شماره 101 تا غیره اگه طرف امد شماره جدید داد یعنی 101 رو کد 100 سیستم پیغام بده این شماره تکراری می باشد ممنون میشم کمک کنید من رو اگه فایلی دارید در اختیار من قرار بدید تا بتوانم در فایل از وارد کردن اطلاعات تکراری جلوگیری کنم با تشکر فراوان.

سلام

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

موقع ثبت نیز همون شماره لیبل در بانک ذخیره می شه و همینطور الی آخر

دست کاربر هم از تغییر دادن شماره کوتا ه می شه وانطوری دیگه شماره تکراری در بانک بوجود نمی آد :لبخند::بامزه::چشمک:

شاد شاد :لبخند:

davidrobert
جمعه 16 فروردین 1392, 12:39 عصر
ممنون از کمکتون ولی من یه مشکلی پیدا کردم در اجرا دستورات دستور CommandType رو خطا میده و نمی دانم چطور باید خطاش رو رفع کنم .
این کلاس DataAccess من برای اتصال به دیتابیس هستش و در داخل این کد های مربوط به newid رو نوشتم ممنون میشم ببنید ایراد کارم چی تا من درست کنم تا بتونم تو فرم صداش بزنم.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace Project_Poshak
{
class DataAccess
{
public static bool ShowFriendMessage = true;
public static string Server = "";
public static string DataBase = "";
public static string UserName = "";
public static string PassWord = "";
public static bool isExpress = true;
SqlConnection con;
SqlCommand cmd;
SqlDataAdapter da;

public string LastError = "";
public DataAccess()
{
con = new SqlConnection();
cmd = new SqlCommand();
da = new SqlDataAdapter();
cmd.Connection = con;
da.SelectCommand = cmd;
}
public void Connect()
{
try
{
string cs = "";
if (isExpress)
{
cs = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True";
}
else
{
cs = @"server=" + Server + ";database=" + DataBase + ";trusted_connection=yes;";
//cs = @"server=" + server + ";database=" + database + ";uid=" + user + ";pwd=" + password + ";";
}
con.ConnectionString = cs;
con.Open();
}
catch (Exception ex)
{
if (!ShowFriendMessage)
LastError = ex.Message;
else
LastError += "اشکال در ارتباط با دیتابیس / با مدیر برنامه تماس حاصل فرماید";
}
}
public void Disconnect()
{
con.Close();
}
public DataTable select(string sql)
{
DataTable dt = new DataTable();
try
{
cmd.CommandText = sql;
da.SelectCommand = cmd;
da.Fill(dt);
con.Close();
}
catch (Exception ex)
{
if (!ShowFriendMessage)
LastError = ex.Message;
else
LastError += "خطا در خواندن اطلاعات";
}
return dt;
}
public void DoCommand(string sql)
{
try
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
cmd.ExecuteScalar();
}
catch (Exception ex)
{
if (!ShowFriendMessage)
LastError += ex.Message;
else
LastError += "خطا در اجرا دستورات";
}
}
public string newid()
{
//string atcnt;
//SqlCommand Dtcmd = new SqlCommand();
//SqlConnection Dtcon = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True");
//Dtcon.Open();
//Dtcmd.CommandText = CommandType.Text;
//Dtcmd.CommandText = "select max(substring(DN_Doc,4,5)) from TblDocAndNum (nolock)";
//Dtcmd.Connection = Dtcon;
//atcnt = Convert.ToString(Dtcmd.ExecuteScalar());
//Dtcon.Close();
//return atcnt;
string atcnt;
con.Open();
cmd.CommandText = CommandType.Text;
cmd.CommandText = "select max(substring(DN_Doc,4,5)) from TblDocAndNum (nolock)";
cmd.Connection = con;
atcnt = Convert.ToString(cmd.ExecuteScalar());
con.Close();
return atcnt;
}
}
}

sgh_programer
جمعه 16 فروردین 1392, 13:28 عصر
سلام
یه راه خیلی ساده این است که
شما اول اون فیلد رو کلید اصلی کنید بعد کد های زیر را بنویسید


try
{
//دستورات درج در بانک اطلاعاتی
}
catch (SqlException ex)
{
if (ex.Number == 2627)
{
MessageBox.Show("اطلاعات تکراری است");
}
}

یعنی اینکه اگر اطلاعات وارد شده تکراری باشد sql خطای شماره2627 را میده که شما بر اساس همین میتونید داده های ورودی را مدیریت کنید البته راه های زیادی هست که به نظرم این راحت تره

موفق باشی

davidrobert
جمعه 16 فروردین 1392, 15:08 عصر
سلام من دستورات رو برای جلوگیری از اطلاعات تکراری قرار دادم پیغام خطا نداد و یه مشکل دیگه اینکه اطلاعات رو وقتی وارد میکنم از اطلاعات 2 تا وارد میکنه به جای یک اطلاعات و پیغام خطا هم نمیده و فیلد هام هم کلید کردم تا وارد شدن اطلاعات تکراری جلوگیری کنه.
این دستور مربوط کلاس دیتابیس هستش.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace Project_Poshak
{
class DataAccess
{
public static bool ShowFriendMessage = true;
public static string Server = "";
public static string DataBase = "";
public static string UserName = "";
public static string PassWord = "";
public static bool isExpress = true;
SqlConnection con;
SqlCommand cmd;
SqlDataAdapter da;

public string LastError = "";
public DataAccess()
{
con = new SqlConnection();
cmd = new SqlCommand();
da = new SqlDataAdapter();
cmd.Connection = con;
da.SelectCommand = cmd;
}
public void Connect()
{
try
{
string cs = "";
if (isExpress)
{
cs = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True";
}
else
{
cs = @"server=" + Server + ";database=" + DataBase + ";trusted_connection=yes;";
//cs = @"server=" + server + ";database=" + database + ";uid=" + user + ";pwd=" + password + ";";
}
con.ConnectionString = cs;
con.Open();
}
catch (Exception ex)
{
if (!ShowFriendMessage)
LastError = ex.Message;
else
LastError += "اشکال در ارتباط با دیتابیس / با مدیر برنامه تماس حاصل فرماید";
}
}
public void Disconnect()
{
con.Close();
}
public DataTable select(string sql)
{
DataTable dt = new DataTable();
try
{
cmd.CommandText = sql;
da.SelectCommand = cmd;
da.Fill(dt);
con.Close();
}
catch (Exception ex)
{
if (!ShowFriendMessage)
LastError = ex.Message;
else
LastError += "خطا در خواندن اطلاعات";
}
return dt;
}
public void DoCommand(string sql)
{
try
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
cmd.ExecuteScalar();
}
catch (Exception ex)
{
if (!ShowFriendMessage)
LastError += ex.Message;
else
LastError += "خطا در اجرا دستورات";
}
}
//public string newid()
//{
// //string atcnt;
// //SqlCommand Dtcmd = new SqlCommand();
// //SqlConnection Dtcon = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True");
// //Dtcon.Open();
// //Dtcmd.CommandText = CommandType.Text;
// //Dtcmd.CommandText = "select max(substring(DN_Doc,4,5)) from TblDocAndNum (nolock)";
// //Dtcmd.Connection = Dtcon;
// //atcnt = Convert.ToString(Dtcmd.ExecuteScalar());
// //Dtcon.Close();
// //return atcnt;
// string atcnt;
// con.Open();
// cmd.CommandText = CommandType.Text;
// cmd.CommandText = "select max(substring(DN_Doc,4,5)) from TblDocAndNum (nolock)";
// cmd.Connection = con;
// atcnt = Convert.ToString(cmd.ExecuteScalar());
// con.Close();
// return atcnt;
//}
}
}


این دستور مربوط به ثبت اطلاعات در می باشد در کلاس سند و شماره فاکتور
public void add()
{
try
{
//string sql = "Insert into TblDocAndNum(DN_Doc,DN_Num)";
//sql += "values({0},{1})";
//sql = string.Format(sql, this.Doc, this.Num);
//da.Connect();
//da.DoCommand(sql);
//da.Disconnect();
string sql = "Insert into TblDocAndNum(DN_Doc,DN_Num)values(N'{0}',N'{1}')";
sql = string.Format(sql, this.Doc, this.Num);
da.Connect();
da.DoCommand(sql);
da.Disconnect();
}
catch (SqlException ex)
{
if (ex.Number == 2627)
{
FMessegeBox.FarsiMessegeBox.Show("اطلاعات تکراری است");
}
}
}
این دستور هم مربوط به فرم می باشد که برای ذخیره اطلاعات رو دکمه زده میشه.
private void PicAdd_Click(object sender, EventArgs e)
{
if (TxtDoc.Text == "")
{
FMessegeBox.FarsiMessegeBox.Show("لطفاً شماره سند رو وارد کنید", "کمبود اطلاعات", FMessegeBox.FMessegeBoxButtons.Ok, FMessegeBox.FMessegeBoxIcons.None);
return;
}
if (TxtNum.Text == "")
{
FMessegeBox.FarsiMessegeBox.Show("لطفاً شماره فاکتور را وارد کنید", "کمبود اطلاعات", FMessegeBox.FMessegeBoxButtons.Ok, FMessegeBox.FMessegeBoxIcons.None);
return;
}
clsAddDocAndFac cld = new clsAddDocAndFac();
cld.Doc = TxtDoc.Text;
cld.Num = TxtNum.Text;
cld.add();
}
ممنون میشم ایراد دستورم رو نشون بدید که پیغام خطا از تکراری بودن اطلاعات رو بده و همین طور از اطلاعات فقط یک نمونه ذخیره کنه نه دو نمونه. با تشکر فراوان

sgh_programer
جمعه 16 فروردین 1392, 15:42 عصر
شما کلید اصلی را باید تعریف کنی

یعنی اون فیلد را مثلا کد کالا را کلید اصلی کنی بعد اگه کد تکراری باشه خطا میده
102344

sgh_programer
جمعه 16 فروردین 1392, 15:46 عصر
if (TxtDoc.Text == "") {
FMessegeBox.FarsiMessegeBox.Show("لطفاً شماره سند رو وارد کنید", "کمبود اطلاعات", FMessegeBox.FMessegeBoxButtons.Ok, FMessegeBox.FMessegeBoxIcons.None);
return;
}
if (TxtNum.Text == "")
{
FMessegeBox.FarsiMessegeBox.Show("لطفاً شماره فاکتور را وارد کنید", "کمبود اطلاعات", FMessegeBox.FMessegeBoxButtons.Ok, FMessegeBox.FMessegeBoxIcons.None);
return;
}
دوست عزیز شماره فاکتور را نباید کاربر وارد کنه شما باید از جدول فاکتور شماره اخرین فاکتور را پیدا کنی بعد با یک جمع کنی تا بشه شماره فاکتور بعدی
البته جسارت نشده باشه این فقط نظر شخصی منه

موفق باشی

davidrobert
جمعه 16 فروردین 1392, 16:26 عصر
ممنون شماره سند و شماره فاکتور من هر دو کلید شدن در دیتابیس ولی موقع اطلاعات وارد کردن از اطلاعات 2 نمونه میسازه یعنی من می یام داخل تکس باکس سند و شماره فاکتور عدد میدم یعنی 1 و 1 وقتی ذخیره رو میزنم و اطلاعات داخل دیتا گرید رو میبنیم که به جایی اینکه یه اطلاعات وارد کنه 2 تا وارد میکنه و خطا تکراری بودن اطلاعات نمیده.

davidrobert
یک شنبه 18 فروردین 1392, 19:29 عصر
دستت در نکونه khokhan (http://barnamenevis.org/member.php?131732-khokhan) جواب گرفتم فقط یه مشکلی که دارم میخوام خودش شماره فاکتور بده یعنی وقتی فرم لود شد شماره سند جدید بده و وقتی روی ذخیره کلیک میکنم شماره فاکتور ذخیره بشه و شماره سند جدید قرار بده و شماره سند رو به یه عدد جمع نه و شماره فاکتور به دست بیاد و داخل تکس باکس شماره فاکتور قرار بده خوتکار که طرف اینها رو دستی وارد نکونه بلکه خود سیستم وارد کند که تکراری نباشه ممنون میشم این رو هم کمک کنید چون خودم زدم ایراد گرفت برای افزایش شماره سند جدید و فرم ناپدید شد و نشون نداد فرم رو دیگه این هم دستور های فرم.و یه سوال دیگه شما از دستور نمایش تصویر استفاده کردید و class Picture قرار دادید این رو نفمیدم ممنون میشم این رو هم کمک کنید.
این کلاس مربوط به دیتابیسم هستش
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace Project_Poshak
{
public class DataBaseFrmListDocAndNum
{
private SqlCommand cmd;
private SqlConnection con;
private SqlDataAdapter da;
private DataTable dt;

public DataBaseFrmListDocAndNum()
{
}

public void DoCommand(string sql)
{
con = new SqlConnection();
con.ConnectionString=@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True";
cmd = new SqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
con.Close();
}

public DataTable MySelect(string sql)
{
con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True";
cmd = new SqlCommand();
cmd.Connection = con;
da = new SqlDataAdapter(cmd);
dt = new DataTable();
con.Open();
cmd.CommandText = sql;
da.Fill(dt);
con.Close();
return dt;
}
public string newid()
{
string Atcnt;
SqlCommand DTcmd = new SqlCommand();
SqlConnection Dtcon = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True");
Dtcon.Open();
DTcmd.CommandType = CommandType.Text;
DTcmd.CommandText="Select max(substring(DN_Doc,4,5)) from TblDonAndNum (nolock)";
DTcmd.Connection = Dtcon;
Atcnt = Convert.ToString(DTcmd.ExecuteScalar());
Dtcon.Close();
return Atcnt;
}
}
}

این کد مربوط به فرم سند وفاکتور میشه
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Project_Poshak
{
public partial class FrmListDocAndNum : Form
{
public delegate void dgwRowHandler(DataGridViewRow dtgvr);
public event dgwRowHandler OnNewRow;
public FrmListDocAndNum()
{
InitializeComponent();
this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler( this.dataGridView1_CellClick);
}
String connect = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True");
SqlConnection con;
SqlCommand command;
SqlDataAdapter adapter;
DataTable objDatatTable;
string mNAME = "";
private void load()
{
//DataBaseFrmListDocAndNum db = new DataBaseFrmListDocAndNum();
//TxtDoc.Text = "";
//int NewId = 1;
//string strnewid = " ";
//object obj = db.newid();
//if (obj.ToString() != "")
//{
// NewId = Convert.ToInt32(obj.ToString()) + 1;
// strnewid = NewId.ToString();
// strnewid = strnewid.PadLeft(4, '0');
// TxtDoc.Text = strnewid;
//}
//else
//{
// TxtDoc.Text = "0001";

//}
try
{
con=new SqlConnection(connect);
con.Open();
string query="SELECT TblDocAndNum.DN_ID, TblDocAndNum.DN_Doc, TblDocAndNum.DN_Num FROM TblDocAndNum ORDER BY TblDocAndNum.DN_ID DESC";
command = new SqlCommand();
command.CommandText = query;
command.Connection = con;
adapter = new SqlDataAdapter();
adapter.SelectCommand = command;
objDatatTable = new DataTable();
adapter.Fill(objDatatTable);
con.Close();
dataGridView1.DataSource = objDatatTable;
}
catch
{
FMessegeBox.FarsiMessegeBox.Show("سیستم به بانک اطلاعات وصل نشده است / با مدیر تماس بگرید / خطا100 ");
}
}
private void PicExit_Click(object sender, EventArgs e)
{
this.Close();
}

private void FrmListDocAndNum_Load(object sender, EventArgs e)
{

//DataBaseFrmListDocAndNum db = new DataBaseFrmListDocAndNum();
//TxtDoc.Text = "";
//int NewId = 1;
//string strnewid = " ";
//object obj = db.newid();
//if (obj.ToString() != "")
//{
// NewId = Convert.ToInt32(obj.ToString()) + 1;
// strnewid = NewId.ToString();
// strnewid = strnewid.PadLeft(4, '0');
// TxtDoc.Text = strnewid;
//}
//else
//{
// TxtDoc.Text = "0001";

//}
load();
}

private void PicMin_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{

}

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (OnNewRow != null)
OnNewRow(dataGridView1.CurrentRow);
}

private void PicNew_Click(object sender, EventArgs e)
{
try
{
con.Open();
SqlCommand command = new SqlCommand("insert into TblDocAndNum(DN_Doc,DN_Num)values(@DN_Doc,@DN_Num)", con);
command.Parameters.AddWithValue("@DN_Doc", Int32.Parse(TxtDoc.Text));
command.Parameters.AddWithValue("@DN_Num", Int32.Parse(TxtNum.Text));
command.ExecuteNonQuery();
load();
}
catch (SqlException ex)
{
if (ex.Number == 2627)
{
FMessegeBox.FarsiMessegeBox.Show("این شماره سند در بانک اطلاعات موجود می باشد");
}
}
finally
{
if (con.State != ConnectionState.Closed)
{
con.Close();
}
}
}

private void dataGridView1_MouseUp(object sender, MouseEventArgs e)
{
TxtDoc.Text = dataGridView1[1, dataGridView1.CurrentRow.Index].Value.ToString();
TxtNum.Text = dataGridView1[2, dataGridView1.CurrentRow.Index].Value.ToString();
}

private void button1_Click(object sender, EventArgs e)
{
DataBaseFrmListDocAndNum db = new DataBaseFrmListDocAndNum();
TxtDoc.Text = "";
int NewId = 1;
string strnewid = " ";
object obj = db.newid();
if (obj.ToString() != "")
{
NewId = Convert.ToInt32(obj.ToString()) + 1;
strnewid = NewId.ToString();
strnewid = strnewid.PadLeft(4, '0');
TxtDoc.Text = strnewid;
}
else
{
TxtDoc.Text = "0001";

}
}
}
}

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

sgh_programer
یک شنبه 18 فروردین 1392, 19:49 عصر
بنام خدا
سلام مجدد
من خودم از کد های زیر برای بدست آوردن شماره فاکتور بعدی استفاده میکنم(شاید کمکتنون کنه)
public static string Get_FactorNumber_Next()//برای بدست آوردن شماره فاکتور بعدی
{
string str_factor = "0";
SqlConnection cnn = new SqlConnection(Program.connctionstring);
cnn.Open();
SqlCommand cmm = new SqlCommand("select MAX(faktornumber) from Tbl_faktor2", cnn);
cmm.CommandType = CommandType.Text;
SqlDataReader reader = cmm.ExecuteReader();
if(reader.Read())
{
str_factor = reader["faktornumber"].ToString();
}
Int64 fac = Int64.Parse(str_factor);
fac = fac + 1;
str_factor = fac.ToString();
return str_factor;
}

ودر فرم لود فرم صدور فاکتور
lblshomarefaktor.Text = SGH_Factor_Save.Get_FactorNumber_Next().ToString() ;

موفق باشی

sgh_programer
یک شنبه 18 فروردین 1392, 19:59 عصر
ضمنا هنگامی که صدور فاکتور زدید و فاکتور ثبت شد دیگه نیازی نیست مجددا از بانک بزرگترین شماره فاکتور را بخونی همون مقداری که قبلا خوندی و اونو توی تکس باکس یا لیبل ریختی با یک جمعش با این کار شماره فاکتور بعدی رو تولید کردی و هم اینکه باعت افزایش سرعت میشه(چون تنها یک بار اون هم موقعی که فرم صدور فاکتور باز میشه select از جدول صورت میگیره)

موفق باشی

davidrobert
یک شنبه 18 فروردین 1392, 20:41 عصر
ممنون فقط من اعلان با مشکلی که بر خورد کردم اینکه شما یه متغییر دارید به نام SGH_Factor_Save این متغییر برای چی هستش ممنون میشم کمک کنید من رو من کد های شما رو نوشتم برای شماره سندم که وقتی فرم باز میشه شماره سند رو وارد کنه و شماره سند رو با یک جمع کنه و شماره فاکتور هم وارد کنه ممنون میشم این متغییر
SGH_Factor_Save رو بگید چی هستش چون موقع وارد شدن من همچین متغییری ندیدم با تشکر فراوان اینم کد های من. چون قسمت
SqlConnection cnn = new SqlConnection(Program.connctionstring); من در قسمت Program.connectionstring آدرس فایل پایگاه داده رو دادم. و کد ها رو نوشتم. اینم کد های من در فرم ثبت سند و فاکتور
public static string Get_DocAndNum_next()//برای به دست آوردن شماره سند و فاکتور بعدی
{
string docs= "0";
SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True");
cnn.Open();
SqlCommand cmm = new SqlCommand("select MAX(DN_Doc) from TblDocAndNum", cnn);
cmm.CommandType = CommandType.Text;
SqlDataReader reader = cmm.ExecuteReader();
if (reader.Read())
{
docs = reader["DN_Doc"].ToString();
}
Int64 docc = Int32.Parse(docs);
docc = docc + 1;
docs = docc.ToString();
return docs;

sgh_programer
یک شنبه 18 فروردین 1392, 22:25 عصر
بنام خدا

SGH_Factor_Save این متغییر برای چی هستش ممنون میشم کمک کنید
سلام مجدد دوست گرامی اون تابع بالا (Get_FactorNumber_Next)رو توی یه کلاسی بنام SGH_Factor_Save نوشتم چون برای هرقسمت از برنامم کلاس جدا گانه مینویسم که بعدا راحت تر بتونم تغییر بدم


من در قسمت Program.connectionstring آدرس فایل پایگاه داده رو دادم

کار درستی کردید برای این که مجبور نباشم در هرقسمت از برنامه کانکشن استرینگ تعریف کنم اونو در Program تعریف میکنم

یه پیشنهاد:سعی کن استور پروسیجر را یاد بگیری

اگه به این شکل کد نویسی کنی
SqlCommand command = new SqlCommand("insert into TblDocAndNum(DN_Doc,DN_Num)values(@DN_Doc,@DN_Num) ", con);

بعد از گذشت چند وقت که حجم دیتا بالا رفت اونوقت سرعت برنامتون(هنگام کارکردن با بانک اطلاعاتی) پایین میاد
ولی وقتی از استور پروسیجر استفاده کنی حالا حالاها سرعت پایین نمیاد (البته اینایی که گفتم یه تجربه بود)

موفق باشی

davidrobert
دوشنبه 19 فروردین 1392, 00:40 صبح
ممنون بابت کمک کردن و در اختیار قرار دادن تجربه تون یک دنیا ممنون

davidrobert
دوشنبه 19 فروردین 1392, 16:58 عصر
سلام کدهای که دادید رو امتحان کردم ولی مشکلی دارم مشکل من اینکه وقتی فرم رو اجرا میکنم و صفحه دریافت شماره سند و فاکتور رو باز میکنم صفحه نا پدید میشه همون کارای که گفتید رو انجام دادم و اینم کد نویسه های من کد نویسه مربوط به کلاس SGH_DOC_NUM
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace Project_Poshak
{
class SGH_Doc_Save
{
public static string Get_DocNumber_Next()//برای به دست آوردن شماره سند
{
string strdoc = "0";
SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True");
cnn.Open();
SqlCommand cmm = new SqlCommand("select MAX(DN_Num) from TblDocAndNum", cnn);
cmm.CommandType = CommandType.Text;
SqlDataReader reader = cmm.ExecuteReader();
if (reader.Read())
{
strdoc = reader["DN_Num"].ToString();
}
Int64 docc = Int64.Parse(strdoc);
docc = docc + 1;
strdoc = docc.ToString();
return strdoc;
}
}
}

کد مربوط به اجرا بر نامه موقع اجرا در فرم
TxtNum.Text = SGH_Doc_Save.Get_DocNumber_Next().ToString();
ممنون میشم به هم بگید ایراد کارم چه که فرم اجزار نشوده ناپدید میشه خیلی ممنون میشم.

davidrobert
دوشنبه 19 فروردین 1392, 19:22 عصر
بچه های کسی نمی دونه علت اینکه هی پروژه من رو میندازه بیرون بابت کد دریافت شماره فاکتور اگه کسی میدونه دلیل انداختن بیرون برنامه موقع اجرا کدا های دریافت شماره فاکتور چی هستش به من کمک کنه خیلی ممنون میشم. من پروژه آقا khokhan (http://barnamenevis.org/member.php?131732-khokhan) استفاده کردم تونستم از وارد کردن اطلاعات تکراری جلوگیری کنم ولی برای دریافت شماره فاکتور هاش میزنم با خطا مواجه میشم و همچنین کد های آقا sgh_programer (http://barnamenevis.org/member.php?260906-sgh_programer) میزنم هم با خطا مواجه منظور از خطا اینکه موقع اجرا من رو میندازه بیرون برنامه تا به صفحه ثبت سند و فاکتور میریسی برنامه ناپدید میشه و باید از برنامه خارج شد به وسیله دات نت نه دستور خروج و دیگه فرم دیده نمیشه تا ازش خارج بشیم ممنون میشم کسی دلیل این ناپدید شدن فرم در موقع اجرا میدونه به هم بگه کد هاش رو چندین با مرور میکنم ولی علت این خطا رو نمی دانم.کد های که استفاده کردم در اینجا موجود می باشد خط به خط مثل همین کد ها پیش رفتم ولی با مشکل رو به رو میشم کلی هم دگت کردم تا علت این انداختن بیرون از برنامه رو بفهمم نشود.

sgh_programer
دوشنبه 19 فروردین 1392, 23:11 عصر
بنام خدا
سلام مجدد

این صفحه ای که میگید رو کداشو به صورت خط به خط اجرا کن ببین مشکل از کجاست

موفق باشی

davidrobert
چهارشنبه 21 فروردین 1392, 15:01 عصر
سلام مشکلم حل شد اگه کسی خواست از این کد استفاده کنه فقط باید این کد رو تغییر بده.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace Project_Poshak
{
public class DataBaseFrmListDocAndNum
{
private SqlCommand cmd;
private SqlConnection con;
private SqlDataAdapter da;
private DataTable dt;

public DataBaseFrmListDocAndNum()
{
}

public void DoCommand(string sql)
{
con = new SqlConnection();
con.ConnectionString=@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True";
cmd = new SqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
con.Close();
}

public DataTable MySelect(string sql)
{
con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True";
cmd = new SqlCommand();
cmd.Connection = con;
da = new SqlDataAdapter(cmd);
dt = new DataTable();
con.Open();
cmd.CommandText = sql;
da.Fill(dt);
con.Close();
return dt;
}
public string newid()
{
string Atcnt;
SqlCommand DTcmd = new SqlCommand();
SqlConnection Dtcon = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshak.mdf;Integrated Security=True;User Instance=True");
Dtcon.Open();
DTcmd.CommandType = CommandType.Text;
DTcmd.CommandText="Select max(substring(DN_Doc,4,5)) from TblDonAndNum (nolock)";
DTcmd.Connection = Dtcon;
Atcnt = Convert.ToString(DTcmd.ExecuteScalar());
Dtcon.Close();
return Atcnt;
}
}
}


کدی که باید تغییر بدید این هستش که باید به این نوع بنویسید تا مشکلتون حل بشه من خودم بعد از 3 روز مشکلم رو حل کردم به کمک بچه های سایت برنامه نویسی
با تشکر از همه بچه ها
DTcmd.CommandText="Select max(DN_Doc) from TblDonAndNum";
این دستور sql رو به این صورت بنویسید جواب میگیرید.