PDA

View Full Version : ايراد من كجاست؟



poya121
دوشنبه 08 آبان 1391, 23:52 عصر
سلام من يك sp براي select نوشتم كه بر اساس نام و نام خانوادگي در جدول جستجو ميكنه،اينم كدي كه نوشتم:
select* from table where name=@name and fname=@fname
اينم كد من تو سي شارپcon.Open();
cmd1 = new SqlCommand("StoredProcedure2", con);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = textBox1.Text;
cmd1.Parameters.Add("@fname", SqlDbType.NVarChar, 50).Value = textBox2.Text;
SqlDataReader data;
data = cmd1.ExecuteReader();
if (data.Read())
{
DataTable dt = new DataTable();
dt.Load(data);
dataGridView1.DataBindings.Clear();
dataGridView1.DataSource = dt;
con.Close();
data.Close();
}
با اين كد مقدار رو پيدا ميكنه و ديتا خونده ميشه ولي داخل گريد ويو چيزي نشون داده نميشه،هدر فيلد ها مياد ولي مقادير نمياد...
اما وقتي select*form table رو ميزنم يا شرطم تك مقداري هست(select*form table where name=@name ) همه موارد رو مياره،ايراد از كجاست؟

اگه راهي هست خواهش ميكنم بگيد و اين تاپيكو حذف نكنيد، لطفا لينك تاپيك بديد

morteza271
سه شنبه 09 آبان 1391, 00:04 صبح
دوست عزیز شما اول همین کوئری خودتون رو select* from table where name=@name and fname=@fname توی sql اجرا کنید ببینید که نتیجه داره یا نه؟!!
البته به جای پارامترها هم همون هایی که از سی شارپ ارسال می کنید و جدول خالی میشه رو بذارین.

poya121
سه شنبه 09 آبان 1391, 00:19 صبح
اجرا كردم جواب داد
ولي همون كد هايي رو كه خود كوئري ايجاد كرد رو بازم تو sp نوشتم ولي بازم گريد ويو خالي اورد

فرید نجفلو
سه شنبه 09 آبان 1391, 01:08 صبح
دوست عزیز تو شرط به جای Read از HasRow استفاده کنید ببینید چی میشه
مخصوصا اگه تو دیتابیس فقط یه رکورد داشته باشید ممکنه از همین باشه

morteza271
سه شنبه 09 آبان 1391, 01:11 صبح
اجرا كردم جواب داد
ولي همون كد هايي رو كه خود كوئري ايجاد كرد رو بازم تو sp نوشتم ولي بازم گريد ويو خالي اورد

کدتون رو به صورت زیر تغییر بدین ببینید درست میشه :
cmd1 = new SqlCommand("StoredProcedure2", con);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = textBox1.Text;
cmd1.Parameters.Add("@fname", SqlDbType.NVarChar, 50).Value = textBox2.Text;

SqlDataAdapter da = new SqlDataAdapter(cmd1);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;

poya121
سه شنبه 09 آبان 1391, 09:34 صبح
ممنون اقا مرتضي جواب داد ولي من كدمو اينطور تغيير دادم چون به شرط احتياج دارم
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);

dataGridView1.DataBindings.Clear();
dataGridView1.DataSource = dt;
SqlDataReader data;
data=cmd.ExecuteReader();
if(data.Read())
{
con.Close();

حالا اين كار من درسته يا نه؟

morteza271
سه شنبه 09 آبان 1391, 22:17 عصر
حالا این شرطه برای چی هست؟؟؟
اگه میخواین ببینید که آیا کوئری نتیجه داره یا نه میتونید از شرط زیر استفاده کنید:
if (dt.Rows.Count > 0)
{
// Your Code...
}
و دیگه نیازی نیست که از data=cmd.ExecuteReader(); استفاده کنید.

Ahmad765
سه شنبه 09 آبان 1391, 22:22 عصر
if(data.Read()) {
con.Close();


از
try
catch
finaly
استفاده کنید و con.close() را در فاینالی قرار بدید.