PDA

View Full Version : مشکل در پاس دادن sqlparameter در یک تابع



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 استفاده کنم.

saeedr22
شنبه 31 مرداد 1388, 04:15 صبح
اگه جوابی تا حالا نگرفتین دلیلش اینکه که همونطور که خودتون میگین این یه ایده است پس یه بار فقط به ذهن شما رسیده.
ولی
من احساس می کنم که تو این روش پارامترها رو به صورت آرایه نمی فرستین.

مهدی کرامتی
سه شنبه 10 شهریور 1388, 11:55 صبح
خط تعریف تابع را به این شکل تغییر بده:
static public DataSet Execute_dataset(string conn_str, string query_str, List<SqlParameter> Parameters_sql)

یعنی بجای ListArray از List<SqlParameter> که یک لیست Generic از جنس SqlParameter است استفاده کن.

در ضمن، متن اون خطایی که گفتی رو هم اینجا بنویس.