PDA

View Full Version : سوال: مشکل در جستجو با استفاده از StoredProcedure و نمایش اطلاعات در gridwiev



sorena2000
پنج شنبه 19 مرداد 1391, 16:13 عصر
با سلام
من یک StoredProcedure نوشتم برای سرچ کردن که سه جدول رو با هم join می کنه تو خود sql بدون مشکل کد اجرا می شه اما وقتی می خوام توی برنامه از این Procedure استفاده کنم اطلاعات رو بهم نمایش نمی ده ممنون می شم اگه کسی هست راهنمایی کنه

کد StoredProcedure
SELECT BS_Tb_Customer.Name,NameRice, btd.DateLogin, btd.weightCamlet,BS_Tb_personel.Name,btd.TDescript ion
FROM BS_Tb_Deposit btd

INNER JOIN BS_Tb_Customer ON BS_Tb_Customer.IDCustomer = btd.IDCustomer INNER JOIN BS_Tb_Rice btr ON btr.IDRice = btd.IDRice INNER JOIN BS_Tb_personel
ON BS_Tb_personel.IDPersonel = btd.IDPersonel
WHERE
btd.IDDeposit = COALESCE(@IDDeposit,btd.IDDeposit)
AND btd.IDCustomer = COALESCE(@IDCustomer,btd.IDCustomer)
AND btd.IDRice = COALESCE(@IDRice, btd.IDRice )
AND btd.DateLogin >= COALESCE(@DateLogin,btd.DateLogin)
AND btd.DateLogin <= COALESCE(@DateLogin1,btd.DateLogin)
AND btd.weightCamlet = COALESCE(@weightCamlet,btd.weightCamlet)


این هم کدی که در برنامم نوشتم .
string connection = "Data Source=(local);Initial Catalog=Test;Integrated Security=True";
using (SqlConnection conn = new SqlConnection(connection))
{
using (SqlCommand cmd = new SqlCommand("SelectCustomer"))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@IDDeposit", radTextBox1.Text));
cmd.Parameters.Add(new SqlParameter("@IDCustomer", radTextBox2.Text));
cmd.Parameters.Add(new SqlParameter("@IDRice", radTextBox3.Text));
cmd.Parameters.Add(new SqlParameter("@DateLogin", radTextBox4.Text));
cmd.Parameters.Add(new SqlParameter("@DateLogin1", radTextBox5.Text));
cmd.Parameters.Add(new SqlParameter("@weightCamlet", radTextBox6.Text));
conn.Open();
cmd.Connection = conn;
using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection) )
{



GridviewSearch.DataSource = rdr;


rdr.Close();

}

}
}

veniz2008
پنج شنبه 19 مرداد 1391, 17:10 عصر
سلام. به اینصورت بنویس :

SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=Test;Integrated Security=True");
SqlCommand cmd = new SqlCommand("SelectCustomer",conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@IDDeposit", radTextBox1.Text));
cmd.Parameters.AddWithValue("@IDCustomer", radTextBox2.Text));
cmd.Parameters.AddWithValue("@IDRice", radTextBox3.Text));
cmd.Parameters.AddWithValue("@DateLogin", radTextBox4.Text));
cmd.Parameters.AddWithValue("@DateLogin1", radTextBox5.Text));
cmd.Parameters.AddWithValue("@weightCamlet", radTextBox6.Text));
conn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);
GridviewSearch.DataSource = dt;
موفق باشی.

sorena2000
شنبه 21 مرداد 1391, 13:10 عصر
سلام. به اینصورت بنویس :

SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=Test;Integrated Security=True");
SqlCommand cmd = new SqlCommand("SelectCustomer",conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@IDDeposit", radTextBox1.Text));
cmd.Parameters.AddWithValue("@IDCustomer", radTextBox2.Text));
cmd.Parameters.AddWithValue("@IDRice", radTextBox3.Text));
cmd.Parameters.AddWithValue("@DateLogin", radTextBox4.Text));
cmd.Parameters.AddWithValue("@DateLogin1", radTextBox5.Text));
cmd.Parameters.AddWithValue("@weightCamlet", radTextBox6.Text));
conn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);
GridviewSearch.DataSource = dt;
موفق باشی.


سلام دوست عزیز .
متاسفانه این کد هم درست اجرا نشد .
و فقط نام فیلدهای که می خوام نمایش داده بشه رو نشون می ده و مقدار های اون رو نشون نمی ده .
کد پروسیجر مشکلی نداره و تو خود sql بخوبی کار می کنه و جواب می ده .
ممنون می شم کمک کنید

veniz2008
شنبه 21 مرداد 1391, 14:58 عصر
کدهای بالا ظاهرا مشکل خاصی ندارن. من بارها با همین کدها کار کردم. شما به آخر هر کدوم از textbox ها یه Trim اضافه کن شاید درست بشه. به اینصورت:

cmd.Parameters.AddWithValue("@IDDeposit", radTextBox1.Text.Trim()));
واسه بقیه تکست باکس ها هم Trim رو اضافه کن.

asadegha
شنبه 21 مرداد 1391, 15:20 عصر
شایدم جای تکست باکس ها رو اشتباه قرار دادی. یعنی پارامتر ها رو درست مقدار دهی نمیکنی. اینم بررسی کن. و سعی کن به کنترل ها اسم با معنی بدی که درصد خطا پایین تر بیاد.

تعداد کنترل ها زیاد بشه خودت سردرگم میشی لابلای این همه اسامیه بی معنی و مفهوم.

sorena2000
شنبه 21 مرداد 1391, 18:04 عصر
کدهای بالا ظاهرا مشکل خاصی ندارن. من بارها با همین کدها کار کردم. شما به آخر هر کدوم از textbox ها یه Trim اضافه کن شاید درست بشه. به اینصورت:

cmd.Parameters.AddWithValue("@IDDeposit", radTextBox1.Text.Trim()));
واسه بقیه تکست باکس ها هم Trim رو اضافه کن.

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

veniz2008
شنبه 21 مرداد 1391, 19:12 عصر
اگه در sql همزمان با چند شرط میتونی نتیجه مورد نظر رو بدست بیاری پس احتمال زیاد مقادیری رو که از ویژوال میفرستی سمت sql مقادیر صحیحی نیستن. یه خورده دقت کن مطمئنا مشکلت حل میشه.

sorena2000
یک شنبه 22 مرداد 1391, 11:21 صبح
اگه در sql همزمان با چند شرط میتونی نتیجه مورد نظر رو بدست بیاری پس احتمال زیاد مقادیری رو که از ویژوال میفرستی سمت sql مقادیر صحیحی نیستن. یه خورده دقت کن مطمئنا مشکلت حل میشه.

دوست عزیز ممنون از کمکت بالاخره فهمیدم مشکل از کجا بود .

تمام متغیرها تو کدم مقدارد دهی می شد یعنی متغیرام null نمی شدن و بخاطر همین چیزی نمایش نمی داد . با یک شرط درست شد .
با تشکر