PDA

View Full Version : خطا به هنگام ثبت اطلاعات



fatemeh_kh
جمعه 09 اردیبهشت 1390, 12:29 عصر
سلام.
من یه فایل اکسس دارم به که در اون یک Tbl هست به نام Table1 این فایل شامل 23 ستون از اطلاعات پرسنلی شرکت.

و 85 رکورد

یک دیتا بیس هم در اس کیو ال دارم که شامل جدولی به نام User هستش در این جدول هم عیناً ستون های Tbl اکسس و به همان ترتیب تکرار شده است.
بدون رکورد..

به روش لینکیو می خواهم اطلاعات را به جدول اس کیو ال ببرم. یک فرم در سی شارپ طراحی کرده که شامل یک text box یک openFileDialog یک Button ّبرای انتخاب فایل اکسس و یک Button دیگر ورود اطلاعات در اس کیو ال گذاشته ام..

دستورات زیر را وارد کرده ام








private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.FileName = txtFileName.Text;

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
txtFileName.Text = openFileDialog1.FileName;
}
}

private void button2_Click(object sender, EventArgs e)
{
string filename = txtFileName.Text;
OleDbConnection c = new OleDbConnection();

if (filename.EndsWith(".mdb"))
{
c.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + filename + "\"";
}

else
{
MessageBox.Show("فرمت قابل قبول نيست");
return;
}


c.Open();


DataClasses1DataContext db = new DataClasses1DataContext();
OleDbCommand cmd = new OleDbCommand("SELECT * FROM Table1", c);
OleDbDataReader r = cmd.ExecuteReader();


while (r.Read())
{
User p = new User();

p.FName = r[1].ToString();
p.Lname = r[2].ToString();
p.FatherName = r[3].ToString();
p.IdNumber = r[4].ToString();


if (r[5].ToString() != " / /")
p.BirthDay = Convert.ToDateTime(PCCalendar.persianDateToDateTim e(r[5].ToString()));
else
p.BirthDay = new DateTime(1753, 1, 1);

p.GenderID = Convert.ToByte(r[6].ToString());
p.SuctionPreferenceID = Convert.ToByte(r[7].ToString());
p.CityID = Convert.ToInt32(r[8].ToString());
p.PlaceIssueID =Convert.ToInt32( r[9].ToString());
p.DebtID = Convert.ToByte(r[10].ToString());
p.TendencyID =Convert.ToByte( r[11].ToString());
p.MarriedTypeID =Convert.ToByte( r[12].ToString());
p.ServiceStateID = Convert.ToByte(r[13].ToString());
p.UniversityID =Convert.ToByte( r[14].ToString());
p.Address = r[15].ToString();
p.Tel = r[16].ToString();
p.Mobile = r[17].ToString();
p.IsExamInfo = Convert.ToBoolean(r[18].ToString());
p.IsPersonel = false;
p.CityIDSokoonat =Convert.ToByte( r[20].ToString());

if (p.Average != null)
p.Average = Convert.ToSingle(r[21].ToString());
else
p.Average = 0;


if (r[22].ToString() == " / /")
p.DateOfGraduating = Convert.ToDateTime(PCCalendar.persianDateToDateTim e(r[22].ToString()));
else
p.BirthDay = new DateTime(1753, 1, 1);


p.NationalCode = r[23].ToString();


db.Users.InsertOnSubmit(p);
}

db.SubmitChanges();




c.Close();

}






اما به هنگام اجرا و کلیک روی باتن دو به خطای زیر بر می خورم..

String or binary data would be truncated.
The statement has been terminated.


ضمن این که انواع داده ای من در اس کیو ال همه ی ID دار ها از نوع int ، همه ی نوشتنی ها از نوع nvarchar از 50 تا 100 ( بسته به فیلد ) می باشد..

Date/Time برای تاریخ ها

در اکسس هم همه یا number و یا text می باشند. Date/Time هم به دلیل تعریف تابعی در سی شارپ persianDateToDateTime به ناچار Text انتخاب کرده ام.

ای هم کد تابع




year = int.Parse(str.Substring(0, str.IndexOf('/')));
month = int.Parse(str.Substring(str.IndexOf('/') + 1, str.LastIndexOf('/') - str.IndexOf('/') - 1));
day = int.Parse(str.Substring(str.LastIndexOf('/') + 1));

return pc.ToDateTime(year, month, day, 0, 0, 0, 0);



حال می خواهم دلیل خطا رو بدونم و چگونه می توانم آن را برطرف کنم..


با سپاس