PDA

View Full Version : اشکال در نوع های موجود در سی شارپ و اس کیو ال (چرا نمیتونم بیش از 10 عدد وارد کنم ؟)



c_doost
دوشنبه 21 فروردین 1391, 20:21 عصر
من در دیتابیس یک فیلد از نوع INT تعریف کردم و میخواهم وقتی در سی شارپ از این فیلد استفاده میکنم و تعداد اعداد به 10 عدد می رسد ارور زیر را میدهد ( اگر تعداد از 10 کمتر باشد مشکلی ایجاد نمیشود )
در خود اس کیو ال میتوانم تا 10 عدد وارد کنم ولی بیشتر ارور میدهد حالا چرا در سی شارپ نمی تونم 10 تا وارد کنم ؟

mostafah110
دوشنبه 21 فروردین 1391, 20:25 عصر
چرا از نوع BIGINT استفاده نمی کنی!!! بعدشم، اگر که تعداد اعدادت بیشتر از ۱۰ تا ست بهتره که از varchar(?) استفاده کنی!!!!

c_doost
دوشنبه 21 فروردین 1391, 20:33 عصر
چرا از نوع BIGINT استفاده نمی کنی!!! بعدشم، اگر که تعداد اعدادت بیشتر از ۱۰ تا ست بهتره که از varchar(?) استفاده کنی!!!!

آخه با این فیلد کار دارم و وقتی هم BIG int میگیرم تو یه جای دیگر به اون گیر مده و وقتی از نوع INT میگیرم مشکلش حل میشه

mostafah110
دوشنبه 21 فروردین 1391, 20:42 عصر
آخه با این فیلد کار دارم و وقتی هم BIG int میگیرم تو یه جای دیگر به اون گیر مده و وقتی از نوع INT میگیرم مشکلش حل میشه

به نظر من بهتر اینه که از نوع varchar استفاده کنی!! یا اگه مخصوص پول هست از نوع money استفاده کنی! من که دیگه نمی دونم مشکلش چیه!!

p.yazdkhasti
سه شنبه 22 فروردین 1391, 16:46 عصر
با سلام
تنها 10 رقم بودن به تنهایی کافی نمی باشد. حداکثر مقدار عدد صحیح علامت دار 32 بیتی یعنی نوع int در #C یا SQL Server برابر با 2,147,483,647 می باشد که 10 رقم است ولی رقم 3،000،000،000 که 10 رقم است را نمی توان در آن ذخیره کرد. بنابراین عدد شما باید کوچکتر از این مقدار باشد در غیر این صورت طبق صحبت دوست عزیز نوع فیلد خود را در SQL Server به bigint تغییر دهید و در #C نیز متغیر خود را به long تغییر دهید.

c_doost
پنج شنبه 24 فروردین 1391, 08:46 صبح
من فیلدهای دیتابیس را میزارم .



ID int Unchecked
l_name nvarchar(50) Checked
name nvarchar(50) Checked
father_name nvarchar(50) Checked
birthday nvarchar(50) Checked
date_ozviat_adi nchar(8) Checked
serial_kart_adi nchar(10) Checked
date_ertegha_ozviat nchar(8) Checked
serial_kart_faal nchar(10) Checked
group_honari nvarchar(50) Checked
reshte_takhasosi nvarchar(50) Checked
tahsilat nvarchar(50) Checked
reshte_tahsili nvarchar(50) Checked
codemeli nchar(10) Checked
shenase_ozviat int Checked

اینم کد کامل صفحه عضویت


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

namespace project_hoharmandan
{
public partial class frm_ozviat : DevComponents.DotNetBar.Office2007Form
{
SqlDataReader dr;
SqlDataAdapter da;
SqlConnection con;
SqlCommand cmd;
DataSet ds;
BindingSource bs;

public frm_ozviat()
{
InitializeComponent();
da = new SqlDataAdapter();
con = new SqlConnection(@"Data Source=.;Initial Catalog=honarmand;Integrated Security=True;Pooling=False");
cmd = new SqlCommand();
ds = new DataSet();
bs = new BindingSource();
}

private long getmaxnumber()
{
if (con.State == ConnectionState.Closed)
{
con.Open();
}

string strmax = "select top 1 shenase_ozviat from tbl_ozviat order by ID desc";
cmd = new SqlCommand();
cmd.CommandText = strmax;
cmd.Connection = con;
try
{
return ((int)cmd.ExecuteScalar());
}
catch
{
return 0000000000;
}
con.Close();
}


DataTable dt = new DataTable();
DataTable dt_final = new DataTable();
DataTable dt_city = new DataTable();
DataTable dt_city_final = new DataTable();
string tmp_code_reshte = "";
string tmp_code_city= "";
string code_ozviat_sabet = "28";
long new_code_ozviat = 0;

string end_codeozv = "";//mahale negahdariye 4 ragham akhar code ozviat
char[] str_arr;//str_arr = negahdari 4 ragham akhar


private void frm_ozviat_Load(object sender, EventArgs e)
{

try
{
if (con.State == ConnectionState.Closed)
{
con.Open();
}
da = new SqlDataAdapter("SELECT * FROM tbl_grouphonari", con);
da.Fill(dt);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
//در اینجا یک دیتاتیبل دیگر را طوری مقدار میدهیم که اولین گزینه را دستی اضافه میکنیم
dt_final.Columns.Add("code_reshte");
dt_final.Columns.Add("reshte_honari");
dt_final.Rows.Add();
dt_final.Rows[0]["code_reshte"] = null;
dt_final.Rows[0]["reshte_honari"] = "انتخاب کنید";

for (int i = 0; i <= dt.Rows.Count - 1; i++)
{
dt_final.Rows.Add();
dt_final.Rows[i + 1]["code_reshte"] = dt.Rows[i]["code_reshte"];
dt_final.Rows[i + 1]["reshte_honari"] = dt.Rows[i]["reshte_honari"];
}

//حافظه دیتاتیبل اول را آزاد میکنیم
dt.Dispose();

cmb_group_honari.DataSource = dt_final;
cmb_group_honari.ValueMember = "code_reshte";
cmb_group_honari.DisplayMember = "reshte_honari";

/////////////// entekhab shahrhaye mojod dar database va rikhtan dar cmb_city
try
{
if (con.State == ConnectionState.Closed)
{
con.Open();
}
da = new SqlDataAdapter("SELECT * FROM tbl_city", con);
da.Fill(dt_city);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
//در اینجا یک دیتاتیبل دیگر را طوری مقدار میدهیم که اولین گزینه را دستی اضافه میکنیم
dt_city_final.Columns.Add("code_city");
dt_city_final.Columns.Add("city_name");
dt_city_final.Rows.Add();
dt_city_final.Rows[0]["code_city"] = null;
dt_city_final.Rows[0]["city_name"] = "انتخاب کنید";

for (int i = 0; i <= dt_city.Rows.Count - 1; i++)
{
dt_city_final.Rows.Add();
dt_city_final.Rows[i + 1]["code_city"] = dt_city.Rows[i]["code_city"];
dt_city_final.Rows[i + 1]["city_name"] = dt_city.Rows[i]["city_name"];
}

//حافظه دیتاتیبل اول را آزاد میکنیم
dt_city.Dispose();

cmb_city.DataSource = dt_city;
cmb_city.ValueMember = "code_city";
cmb_city.DisplayMember = "city_name";
}


private void cmb_group_honari_SelectedValueChanged(object sender, EventArgs e)
{
tmp_code_reshte= cmb_group_honari.SelectedValue.ToString();
}

private void cmb_city_SelectedValueChanged(object sender, EventArgs e)
{
tmp_code_city = cmb_city.SelectedValue.ToString();
}

private void btn_code_ozviat_Click(object sender, EventArgs e)
{
//////// tolide ghesmate moteghayer
str_arr = new char[4];
string temp_codeozv = getmaxnumber().ToString();//temp_codeozv=akharin code ozviat be surat kamel


temp_codeozv.CopyTo(6, str_arr, 0,4); // joda kardane az raghame 6 kode ozviate bargardan shode az tabe getmaxnumber va rikhtan dar str_arr
for (int i = 0; i < str_arr.Length; i++)
end_codeozv += str_arr[i]; // 4 raghaam akher

txt_endcodeozv_moteghayer.Text =Convert.ToString(1+int.Parse( end_codeozv));

/////////////////////////

/// tolide ghesmate sabet
code_ozviat_sabet = "28";
code_ozviat_sabet =code_ozviat_sabet+tmp_code_city + tmp_code_reshte;
txt_code_ozviat_sabet.Text = code_ozviat_sabet;
///////////////////


}

private void buttonX1_Click(object sender, EventArgs e)
{
new_code_ozviat = 0;
new_code_ozviat =long.Parse((code_ozviat_sabet) + txt_endcodeozv_moteghayer.Text);
DataLayer.tbl_ozviat.InsertRow(txt_lname.Text, txt_name.Text, txt_fathername.Text, txt_birthday.Text, txt_date_ozv_adi.Text, txt_serial_adi.Text, txt_ertegha_ozviat.Text, txt_serial_faal.Text, cmb_group_honari.Text, txt_reshte_takhasosi.Text, cmb_tahsilat.Text, txt_reshte_tahsili.Text, txt_codemeli.Text,new_code_ozviat);
}
}
}



shenase_ozviat با توجه به یکسری اطلاعات ورودی توسط کاربر بدست می آید تولید می شود
برای هر فرد جدید که اضافه میکنم باید به آخرین سطر بروم و مقدار فیلد shenase_ozviat را بدست می آورم و با کدهایی که مینویسم 4 رقم آخر محتویات این فیلد را بدست می آروم یکی به آن اضافه مکنم و shenase_ozviat جدید تولید میکنم و در دیتابیس ذخیره میکنم ( 6 رقم اول توسط اطلاعات انتخابی کاربر تولید میشود و 4 رقم آخر را خود نرم افزار تولید میکند که میتواند از 0001 شروع شده و 0002 الی آخر باشد )

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

با تشکر

Mahmoud.Afrad
پنج شنبه 24 فروردین 1391, 19:13 عصر
سلام

بهتره نوع ستون shenase_ozviat رو از int به bigint تغییر بدید نه nchar چون bigint برابر 8بایت اشغال میکنه ولی به صورت رشته 10 بایت اشغال میشه.
توی C#‎‎‎ هم از نوع long استفاده کنید.

پس طبق تابعی که نوشتید


private long getmaxnumber()
{
...
return ((int)cmd.ExecuteScalar());
...

}




باید نوع بازگشتی رو long کنید


return ((long)cmd.ExecuteScalar());

البته اینجوری نمیشه فهمید مشکل کجاست چون به پروژه تون دسترسی ندارم
امتحان کنید . منتظر جواب هستم