PDA

View Full Version : مشکل کوئری ها در #C



meliti
یک شنبه 31 شهریور 1392, 17:22 عصر
سلام. من یه شرط برای برنامم نوشتم که در صورت درست بودنش یه سری اطلاعات رو توی DATABASE ذخیره کنه اما کنترل برنامه از روی شرط بدون چک کردنش میپره روی else


SqlCommand cmd = new SqlCommand("SELECT * FROM Roles WHERE personID='" +lbNumber2.Text + "' and docType=N'" + doctype + "'", Connection);
SqlDataReader dr=cmd.ExecuteReader();

string perID = lbNumber2.Text;

while (dr.Read())
{
if(dr["personID"]==perID && dr["docType"].ToString()==doctype && dr["role"].ToString()=="Create")
{
try
{
SqlConnection con = new SqlConnection(connectionString);
string command = string.Format("insert into ReqCreate (applicantID,docName,type,text) values (N'{0}',N'{1}',N'{2}',N'{3}')", lbNumber2.Text, txtName1.Text,doctype, rtxtNotePad.Text);
SqlCommand cm = new SqlCommand(command, con);
con.Open();
cm.ExecuteNonQuery();
con.Close();
MessageBox.Show("درخواست شما ثبت شد!");
this.ResetForm();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}
else
{
MessageBox.Show("شما مجاز به درخواست ایجاد این نوع سند نیستید");
}
}
dr.Close();
Connection.Close();
}

hamid_hr
یک شنبه 31 شهریور 1392, 17:40 عصر
تو شرط dr["personID"] v رو به صورت زير بنويس
dr["personID"].toString()
تست كن ببين درست نشد

meliti
یک شنبه 31 شهریور 1392, 18:14 عصر
نه، من این مشکل و تو قسمت log in برنامم هم دارم، جایی که باید نام کاربری و رمز رو چک کنه از روی شرط رد میشه

hamid_hr
یک شنبه 31 شهریور 1392, 18:29 عصر
فك نكنم از روي شرط رد بشه
چك ميكنه ميبيني false ميره قسمت else
منطق اينو ميگه

meliti
یک شنبه 31 شهریور 1392, 18:36 عصر
تو trace کردن برنامه چطوری میتونم بفهمم dr مقدار گرفته یا نه؟

hamid_hr
یک شنبه 31 شهریور 1392, 18:49 عصر
مقدار نگرفته باشه اصلا داخل حلقه نميره
يك بريك پويتن بزار روي if اگه رفت روش يعني مقدار گرفته

meliti
یک شنبه 31 شهریور 1392, 19:04 عصر
if چک میشه ولی تو قسمت result view مربوط به dr مینویسه هیچ نتیجه ای بدست نیومده
این نشون میده کوئری اشتباهه ولی وقتی همین کوئری رو توی Sql server میزنم جوابی که میخوام رو میده

hamid_hr
یک شنبه 31 شهریور 1392, 19:34 عصر
وقتي if چك ميشه يعني dr مقدار گرفته
بيا اين كارو بكن
چند تا متقيير از نوع string بساز
بعد خروجي dr رو بداخل اين متقييرا بريز
با بريك پوينت ببين مقدارشون چي هستش
اينطوري ميشه
string tmp = dr["docType"].ToString();
ببين مقدار tmp چي ميشه

meliti
یک شنبه 31 شهریور 1392, 20:55 عصر
مقدار گیری درسته
من توی if سه تا شرط دارم که هر سه رو جدا جدا امتحان کردم و فهمیدم مشکل واسه کدوم شرطه
توی این شرط
dr["docType"].ToString()==doctype
مقدار doctype فارسیه ، و احتمالا مشکل فارسی بودنشه که شرط رو نقض میکنه
چطوری میتونم این مشکل و حل کنم؟؟!

hamid_hr
یک شنبه 31 شهریور 1392, 21:07 عصر
http://barnamenevis.org/showthread.php?320175-%D9%85%D8%B4%DA%A9%D9%84-%D8%A8%D8%A7-%D8%AD%D8%B1%D9%81-quot-%DB%8C-quot-%D8%AF%D8%B1-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-(-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%A7%DA%A9%D8%B3%D8%B3-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D8%B8%D8%B1%D9%81-DataGrid-)&p=1762504&viewfull=1#post1762504