amirferdowsi
پنج شنبه 31 مرداد 1387, 00:28 صبح
سلام
من با استفاده از معماری سه لایه دارم یک برنامه می نویسم که در آن دو مفدار رو باید درون دو TextBox قرار بدم که به صورت زیر اقدام به نوشتن کردم :
لایه DAL :
public SqlDataReader Get(string Name)
{
SqlConnection obj_Connection = new SqlConnection("");
SqlCommand obj_Command = new SqlCommand("sp_GetTest", obj_Connection);
obj_Command.CommandType = CommandType.StoredProcedure;
SqlParameter prm_test;
prm_test = obj_Command.Parameters.Add("@Name", SqlDbType.NVarChar, 20);
prm_test.Value = Name;
SqlDataReader obj_DataReader = null;
try
{
obj_Connection.Open();
obj_DataReader = obj_Command.ExecuteReader();
return obj_DataReader;
}
catch (SqlException obj_ex)
{
throw obj_ex;
}
catch (Exception obj_ex)
{
throw obj_ex;
}
finally
{
if (obj_Connection.State != ConnectionState.Closed)
obj_Connection.Close();
}
}
لایه BLL :
public SqlDataReader Get(string Name)
{
try
{
DA_Test obj_Test = new DA_Test();
SqlDataReader obj_DataReader = obj_Test.Get(Name);
return obj_DataReader;
}
catch (SqlException obj_ex)
{
throw obj_ex;
}
catch (Exception obj_ex)
{
throw obj_ex;
}
}
لایه PL :
protected void Page_Load(object sender, EventArgs e)
{
GetTest("Test1");
}
public void GetTest(string Name)
{
BL_Test obj_Test = new BL_Test();
SqlDataReader obj_DataReader = obj_Test.Get(Name);
string Farsi, English;
do
{
Farsi = obj_DataReader["Farsi"].ToString();
English = obj_DataReader["English"].ToString();
} while (obj_DataReader.Read());
test_Fa.Text = Farsi;
test_En.Text = English;
}
اما موقع اجرا برنامه از دو خطی که به رنگ قرمز هست خطا میگیره ، که متن خطا رو در اینجا نوشتم :
Invalid attempt to call MetaData when reader is closed.
ممنون میشم من رو در این زمینه راهنمایی بفرمائید ، و بفرمائید که اصلاً میشه دیتا رو بین لایه ها با استفاده از SQLDataReader منتقل کرد یا خیر ؟
من با استفاده از معماری سه لایه دارم یک برنامه می نویسم که در آن دو مفدار رو باید درون دو TextBox قرار بدم که به صورت زیر اقدام به نوشتن کردم :
لایه DAL :
public SqlDataReader Get(string Name)
{
SqlConnection obj_Connection = new SqlConnection("");
SqlCommand obj_Command = new SqlCommand("sp_GetTest", obj_Connection);
obj_Command.CommandType = CommandType.StoredProcedure;
SqlParameter prm_test;
prm_test = obj_Command.Parameters.Add("@Name", SqlDbType.NVarChar, 20);
prm_test.Value = Name;
SqlDataReader obj_DataReader = null;
try
{
obj_Connection.Open();
obj_DataReader = obj_Command.ExecuteReader();
return obj_DataReader;
}
catch (SqlException obj_ex)
{
throw obj_ex;
}
catch (Exception obj_ex)
{
throw obj_ex;
}
finally
{
if (obj_Connection.State != ConnectionState.Closed)
obj_Connection.Close();
}
}
لایه BLL :
public SqlDataReader Get(string Name)
{
try
{
DA_Test obj_Test = new DA_Test();
SqlDataReader obj_DataReader = obj_Test.Get(Name);
return obj_DataReader;
}
catch (SqlException obj_ex)
{
throw obj_ex;
}
catch (Exception obj_ex)
{
throw obj_ex;
}
}
لایه PL :
protected void Page_Load(object sender, EventArgs e)
{
GetTest("Test1");
}
public void GetTest(string Name)
{
BL_Test obj_Test = new BL_Test();
SqlDataReader obj_DataReader = obj_Test.Get(Name);
string Farsi, English;
do
{
Farsi = obj_DataReader["Farsi"].ToString();
English = obj_DataReader["English"].ToString();
} while (obj_DataReader.Read());
test_Fa.Text = Farsi;
test_En.Text = English;
}
اما موقع اجرا برنامه از دو خطی که به رنگ قرمز هست خطا میگیره ، که متن خطا رو در اینجا نوشتم :
Invalid attempt to call MetaData when reader is closed.
ممنون میشم من رو در این زمینه راهنمایی بفرمائید ، و بفرمائید که اصلاً میشه دیتا رو بین لایه ها با استفاده از SQLDataReader منتقل کرد یا خیر ؟