PDA

View Full Version : اشکال در یک کد



shirin_h
یک شنبه 02 دی 1386, 13:12 عصر
سلام
من کد زیر را برای خواندن رکوردهای خاصی از پایگاه داده نوشته ام که متآسفانه قسمت if آن اجرا نمی شه
لطفآ کمکم کنید.
ممنون


System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime dt = DateTime.Today.AddDays(1);
pc.GetYear(dt);
pc.GetMonth(dt);
pc.GetDayOfMonth(dt);
string sh = pc.GetYear(dt).ToString() + '/'+ pc.GetMonth(dt).ToString() + '/' + pc.GetDayOfMonth(dt).ToString();
comtxt = "SELECT * FROM student WHERE (" +
"تاریخ_چک_اول='" + sh + "' or تاریخ_چک_دوم='" + sh + "' or تاریخ_چک_سوم='" + sh + "' or تاریخ_چک_چهارم='" + sh + "'" +
")";
try
{
conn = newSqlConnection(constr);
conn.Open();
}
catch (SqlException ex)
{
MessageBox.Show("Error in connection ..." + ex.Message);
}
comm = newSqlCommand(comtxt, conn);
dr = comm.ExecuteReader();
int d1 = dr.GetOrdinal("تاریخ_چک_اول");
int m1 = dr.GetOrdinal("مبلغ_چک_اول");
int d2 = dr.GetOrdinal("تاریخ_چک_دوم");
int m2 = dr.GetOrdinal("مبلغ_چک_دوم");
int d3 = dr.GetOrdinal("تاریخ_چک_سوم");
int d4 = dr.GetOrdinal("تاریخ_چک_چهارم");

while (dr.Read())
{
if (dr.GetString(d1).Equals(sh))
{
textBox1.Text = dr.GetString(m1);
}
else
{
if (dr.GetString(d2).Equals(sh))

textBox1.Text = dr.GetString(m2);
}
}
this.conn.Close();

من می خوام اگه تاریخ_چک_اول برابر تاریخ فردای سیستم هستش مبلغ_چک_اول در textbox1 نشون داده شه و...
که این اتفاق نمی افته :افسرده:

hassan razavi
یک شنبه 02 دی 1386, 13:18 عصر
تاریخ درست شده در متغیر sh شما بصورت کامل 12 کارکتری (01/10/1386) ساخته نمیشه بلکه بصورت مثلا (1/8/1386) ساخته میشه ، حالا ممکنه که در بانکتون بصورت کامل 12 کاراکتری ذخیره شده باشه. با Debug مقادیر sh و dr.GetString(d1 رو باهم چک کن

shirin_h
یک شنبه 02 دی 1386, 15:17 عصر
تو بانکم هم بصورت 86/2/3 ذخیره کردم و بصورت 86/02/03 نیست
موقع debug هم شرط if رو بررسی می کنه ولی داخل حلقش نمی ره
لطفآکمکم کنین
باید به زودی تحویل بدم.

hassan razavi
یک شنبه 02 دی 1386, 15:29 عصر
در موقع Debug مقدار sh و dr.GetString(d1 رو چک کنید.
در کدی که شما نوشتید (در متغیر sh) ، سال 4 رقمی هست ولی در بانک 2 رقمی .این خودش اولین تناقض هست. لطفا مقادیر رو در Debug چک کنید.

shirin_h
یک شنبه 02 دی 1386, 15:51 عصر
چک کردم
اینجا اشتباه نوشتم تو بانکم بصورت 1386 هستش
اصلآ داخل حلقه if نمی ره با اینکه شرطش برقراره

hassan razavi
یک شنبه 02 دی 1386, 15:57 عصر
از String.Compare برای مقایسه استفاده کنید.

shirin_h
یک شنبه 02 دی 1386, 16:54 عصر
می شه کدشو تو دستور if بنویسید؟

hassan razavi
یک شنبه 02 دی 1386, 17:01 عصر
if(string.Compare(dr.GetString(d1),sh)==0)
...

shirin_h
یک شنبه 02 دی 1386, 18:30 عصر
مشکلم با استفاده از


dr.GetString(d1).Trim()

حل شد
حالا یه مشکل جدید دارم
من یه فرم دارم که 2 تا combobox داره ونام و نام خانوادگی رو بر اساس یک quary توش می نویسه و یه textbox دارم که می خوام اگر تاریخ چک اول برابر تاریخ سیستم باشه مبلغ چک اول رو نشون بده و اگر تاریخ چک دوم برابر تاریخ سیستم باشه مبلغ چک دوم رو نشون بده
وقتی که از sqldatareader استفاده می کنم مجبورم یه حلقه


while (dr.Read())

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


try
{
conn = newSqlConnection(constr);
conn.Open();
}
catch (SqlException ex)
{
MessageBox.Show("Error in connection ..." + ex.Message);
}
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime dt = DateTime.Today.AddDays(1);
pc.GetYear(dt);
pc.GetMonth(dt);
pc.GetDayOfMonth(dt);
string sh = pc.GetYear(dt).ToString() + '/'+ pc.GetMonth(dt).ToString() + '/' + pc.GetDayOfMonth(dt).ToString();
comtxt = "SELECT * FROM student WHERE (" +
"تاریخ_چک_اول='" + sh + "' or تاریخ_چک_دوم='" + sh + "'" +
")";
da = newSqlDataAdapter(comtxt, conn);
da.TableMappings.Add("Table", "student");
da.Fill(ds);
this.dviewmanager = ds.DefaultViewManager;
this.comboBox1.DataSource = this.dviewmanager;
this.comboBox1.ValueMember = "student.نام";
this.comboBox2.DataSource = this.dviewmanager;
this.comboBox2.ValueMember = "student.نام_خانوادگی";

comm = newSqlCommand(comtxt, conn);
dr = comm.ExecuteReader();
int d1 = dr.GetOrdinal("تاریخ_چک_اول");
int m1 = dr.GetOrdinal("مبلغ_چک_اول");
int d2 = dr.GetOrdinal("تاریخ_چک_دوم");
int m2 = dr.GetOrdinal("مبلغ_چک_دوم");

while (dr.Read())
{
if (string.Compare(dr.GetString(d1).Trim(), sh.Trim()) == 0)
{
textBox1.Text = dr.GetInt64(m1).ToString();
}
else
{
if (string.Compare(dr.GetString(d2).Trim(), sh.Trim()) == 0)
{
textBox1.Text = dr.GetInt64(m2).ToString();
}
}
}

this.conn.Close();

shirin_h
یک شنبه 02 دی 1386, 20:06 عصر
کسی نمی دونه باید چی کار کنم؟

hassan razavi
یک شنبه 02 دی 1386, 20:11 عصر
اطلاعاتون رو بریز در یک DataTable و با متد Select رکوردها رو فیلتر کنید


myDataTable.Select("Field1 = '1386/10/01'","Sort");

shirin_h
یک شنبه 02 دی 1386, 20:28 عصر
می شه بیشتر راهنمایی کنید
متوجه نمی شم

shirin_h
یک شنبه 02 دی 1386, 21:51 عصر
اگه می شه واضح تر کمکم کنید.
لطفآ
متوجه نمی شم. :خجالت:

shirin_h
دوشنبه 03 دی 1386, 08:19 صبح
کسی نظری نداره؟