aynehband
پنج شنبه 29 مرداد 1388, 17:49 عصر
سلام
من یک تابع نوشتم که بتونم پارامترهایم را بوسیله یک ListArray بفرستم:
من کد را اینجور نوشتم:
static public DataSet Execute_dataset(string conn_str, string query_str, ArrayList Parameters_sql)
{
SqlConnection con = new SqlConnection(conn_str);
//SqlParameterCollection sqpc=new SqlParameterCollection;
SqlCommand command = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
//============== Add Parameters from Input =======================
SqlParameter temp_param = new SqlParameter();
int i = 0;
//---------------------------------------------
//command.Parameters = (SqlParameterCollection)Parameters_sql;
command.Connection = con;
command.CommandText = query_str;
da.SelectCommand = command;
foreach (SqlParameter man1 in Parameters_sql)
{
command.Parameters.Add(man1);
}
if (con.State != ConnectionState.Open) con.Open();
da.Fill(ds);
if (con.State != ConnectionState.Closed) con.Close();
return ds;
}
و بعدش برای فراخوانیش هم این کار رو کردم
static public bool change_pass(string username,string old_pass,string new_pass)
{
ArrayList ar = new ArrayList();
DataSet ds = new DataSet();
SqlParameter prmt = new SqlParameter();
prmt.ParameterName = "@usname";
prmt.Value = username;
ar.Add(prmt);
//-----------------------------
prmt.ParameterName = "@pass";
prmt.Value = old_pass;
ar.Add(prmt);
//---------------------------
ds = DataLayerCode.Data_Conn.Execute_dataset(Configurat ionManager.ConnectionStrings["aspdonnetdbmeghdadConnectionString"].ToString(),
"SELECT * FROM Users_t WHERE (usname=@usname)AND(password=@pass)", ar);
DataTableReader dr = ds.CreateDataReader();
return true;
}
اما خطا میده که پارامترهای command قبلا اختصاص پیدا کردن؟ و به خط
foreach (SqlParameter man1 in Parameters_sql)
{
command.Parameters.Add(man1);
}
گیر میدهد.
خوب حالا یک پیشنهاد بدهید، فقط نگید command را توی تابع ارسال کنم که لایه بندیم را بهم میرزه ، چون ممکن است نخواهم از SQL استفاده کنم.
من یک تابع نوشتم که بتونم پارامترهایم را بوسیله یک ListArray بفرستم:
من کد را اینجور نوشتم:
static public DataSet Execute_dataset(string conn_str, string query_str, ArrayList Parameters_sql)
{
SqlConnection con = new SqlConnection(conn_str);
//SqlParameterCollection sqpc=new SqlParameterCollection;
SqlCommand command = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
//============== Add Parameters from Input =======================
SqlParameter temp_param = new SqlParameter();
int i = 0;
//---------------------------------------------
//command.Parameters = (SqlParameterCollection)Parameters_sql;
command.Connection = con;
command.CommandText = query_str;
da.SelectCommand = command;
foreach (SqlParameter man1 in Parameters_sql)
{
command.Parameters.Add(man1);
}
if (con.State != ConnectionState.Open) con.Open();
da.Fill(ds);
if (con.State != ConnectionState.Closed) con.Close();
return ds;
}
و بعدش برای فراخوانیش هم این کار رو کردم
static public bool change_pass(string username,string old_pass,string new_pass)
{
ArrayList ar = new ArrayList();
DataSet ds = new DataSet();
SqlParameter prmt = new SqlParameter();
prmt.ParameterName = "@usname";
prmt.Value = username;
ar.Add(prmt);
//-----------------------------
prmt.ParameterName = "@pass";
prmt.Value = old_pass;
ar.Add(prmt);
//---------------------------
ds = DataLayerCode.Data_Conn.Execute_dataset(Configurat ionManager.ConnectionStrings["aspdonnetdbmeghdadConnectionString"].ToString(),
"SELECT * FROM Users_t WHERE (usname=@usname)AND(password=@pass)", ar);
DataTableReader dr = ds.CreateDataReader();
return true;
}
اما خطا میده که پارامترهای command قبلا اختصاص پیدا کردن؟ و به خط
foreach (SqlParameter man1 in Parameters_sql)
{
command.Parameters.Add(man1);
}
گیر میدهد.
خوب حالا یک پیشنهاد بدهید، فقط نگید command را توی تابع ارسال کنم که لایه بندیم را بهم میرزه ، چون ممکن است نخواهم از SQL استفاده کنم.