PDA

View Full Version : حرفه ای: تعریف متد های insert,update به صورت داینامیک



alonemm
پنج شنبه 19 اسفند 1389, 12:30 عصر
باسلام:
من میخوام 2 تا متد طراحی کنم که با گرفتن نام جدول و یک سری مثل پارامتر عملیات insert,update رو انجام بده به صورت داینامیک.

مثل:
نام جدول رو بگیره بعد مثل با آرایه ( یا هر نوع شی دیگه) نام فیلد هارو بگیره و جلوش هم مقادیرشو یعنی یجورایی یک کوئری داینامیک بسازم.



باتشکر.

ehsanara
شنبه 21 اسفند 1389, 16:01 عصر
CommandText("Insert" , "PhdTbl" , "Where Id = 1");




void CommandText(string Type ,string Table ,string Where );
{
Connection
command
.
.
.
if(Type == "Insert")
{
}
else
{
}
و بقیه کدها
}

alonemm
شنبه 21 اسفند 1389, 16:28 عصر
باسلام:
با تشکر از شما دوست عزیز:
دوست من کدی که شما نوشتید خیلی مبتدی یانه هست و زیاد فرقی با نوشتن معمولی نداره.
من میخوام نام ستون ها و مقادیر هم به صورت داینامیک ارسال کنم نه به صورت یک رشته.

باتشکر.

نیما حتمی
یک شنبه 22 اسفند 1389, 12:16 عصر
با سلام.شما یا Spgenآشنا هستین؟

irantopweb
سه شنبه 30 فروردین 1390, 19:04 عصر
این چیز ساده اییه ، فقط باید، رَوش کاری در بیاد
یه کلاس می نویسی که استاتیک باشه و فقد query رو اجرا شده و تو همون کلاس هم چند تا function می نویسی که query رو بسازه ، فقط مشکل اینه که صدا زدن و فراخوان و دادن اطلاعات به سیستم خیلی مشکلتر از خود query هست ، مگر اینکه بخوایی سیستمی باشه که کاربر رو روی query زدن محدود کنی یا روش کنترل داشته باشی که میتونه مفید باشه
ولی به نظر من می تونه الگورتیم ساده ایی داشته باشه ، مهم اینه که performance خوبی داشته باشه ، چون داره با دیتا کار می کنه که ممکنه خیلی بهش احتیاج داشته باشیم.

میلاد قاضی پور
چهارشنبه 31 فروردین 1390, 12:21 عصر
شما با توابع خود sql هم میتونید به صورت داینامیک یک تیبل بسازید و بهش مقدار بدید . چرا اینکارو نمیکنید ؟

momimomi
سه شنبه 24 دی 1392, 22:08 عصر
شما با توابع خود sql هم میتونید به صورت داینامیک یک تیبل بسازید و بهش مقدار بدید . چرا اینکارو نمیکنید ؟

بسم الله الرحمن الرحیم
درسته که این پست ها مربوط به 2 سال پیشه اما هنوز سوالش بی جواب مونده
ایشون جدول جدید نمیخواد بسازه میخواد یه تابعی بنویسه که ورودی هاش==> نام جدول, تعداد فیلدها, نام فیلد1, نام فیلد2 و..., مقدار فیلد1, مقدار فیلد2 و... باشه در صورتی که تعداد فیلد مثلا 5 وارد شد 5 تا نام فیلد بگیره و 5 تا مقدار فیلد.
میشه اسم این متد را متد درج سراسری گذاشت.
دوستان اگه کسی بلده استارت بزنه تا با هم تکمیلش کنیم.

Ahmad Chehreghani
سه شنبه 24 دی 1392, 23:26 عصر
من منظور از سوال اصلی رو دقیقا نفهمیدم . چیزی که به ذهنم میرسید که ساده باشه شبیه به این کد بود:



void Insert(string TableName, Dictionary<string, string> Fields)
{
foreach (var item in Fields)
{
// Do action with item.Key and item.Value
}
}




که روش استفادش هم اینه:


Dictionary<string, string> fields = new Dictionary<string, string>();
fields.Add("FirstName", "Ahmad");
fields.Add("LastName", "Chehre");
insert("tblPerson", fields);

momimomi
چهارشنبه 25 دی 1392, 15:37 عصر
سلام دوست عزیز
منظور کلی سوال اینه که یه متد بنویسیم که برای درج در همه ی جدولهای دیتابیسمون استفاده بشه چه جدول 2 تا ستون داشته باشه چه 10 ستون برای همشون بشه از این متد استفاده کرد, اصلا چنین چیزی میشه؟
این کدها رو ببینید

این برای اتصال سراسری

public OleDbConnection SetConnection()
{
OleDbConnection con = new OleDbConnection(@"provider = microsoft.jet.oledb.4.0;" +
@"data source =TS.mdb");
return con;
}


صدا زدنش هم به این شکل

OleDbConnection con = SetConnection();


این هم کدهای درج مقادیر در یک جدول 4 ستونی

public void add_personel(string fname, string lname, string faname, string code)
{
OleDbConnection con = SetConnection();
string q = "insert into personel" +
"(fname,lname,faname,code)" +
"values('" + fname + "','" + lname + "','" + faname + "','" + code +"')";

OleDbCommand cmd = new OleDbCommand(q, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

}


اما در کدهای نوشته شده تعداد فیلدها (ستون ها)ی جدول عدد ثابتی هست (4) اگر بخواهیم این تعداد متغیر باشد و برای درج در جداول مثلا 5 ستونی 6 ستونی 7 ستونی و ... استفاده شود چه باید کرد؟:متفکر:
نمیخواهیم برای هر دستور درج در هر جدول یک متد بنویسیم
میخواهیم متد درج سراسری باشد و برای همه جداول استفاده شود:متفکر:
با تشکر از همه دوستان:تشویق::تشویق:

hamid_hr
چهارشنبه 25 دی 1392, 16:12 عصر
insert into tbl select t1,t2,t3,t4,t5,.....
به این صورت بنویس خب

momimomi
چهارشنبه 25 دی 1392, 16:38 عصر
insert into tbl select t1,t2,t3,t4,t5,.....
به این صورت بنویس خب

خیلی کلیه میشه بیشتر توضیح بدین؟:متفکر:

hamid_hr
چهارشنبه 25 دی 1392, 16:48 عصر
خب این طریقه استفاده select بعنوان ورودی insert‌هستش
اسم تیبلو که میشه به صورت پارامتر بهش بدی
هر چند تا فیلدم داشته باشی میتونی

momimomi
چهارشنبه 25 دی 1392, 18:45 عصر
در قالب یه متد بنویسید متاسفانه توضیحات کافی نیست
متد را به این شکل تغییر دادم

public void insert(string table_name, int fields, string field1_name, string field2_name, string field1_value, string field2_value)
{
string q = "insert into" +table_name+
"("+field1_name+","+field2_name+")" +
"values('" + field1_value + "','" + field2_value +"')";
}

اما در این متد تعداد فیلد ها ثابت است(2) من میخواهم تعداد متغیر باشد لطفا این کدها را تغییر بدین و توضیحاتتان را روی این کدها اعمال بفرمایید.

hamid_hr
پنج شنبه 26 دی 1392, 11:21 صبح
void insertCommand(string[] Values, string TblName)
{
string sqlcmd = "insert into " + TblName + " select '" + string.Join("','", Values) + "'";
}

sohil_ww
پنج شنبه 26 دی 1392, 12:35 عصر
می تونید با توابع یا پروسیجر ها ی آماده sql فیلد ها و جدول های یه بانک و بطور کامل در اورد و از بدست آوردن سطر های که ویرایش شده یا تغییر یافته به طور کامل یه کویری یا اسکریپت دینامیک ساخت بدون این که ما دخالتی توش داشته باشیم

momimomi
پنج شنبه 26 دی 1392, 23:35 عصر
می تونید با توابع یا پروسیجر ها ی آماده sql فیلد ها و جدول های یه بانک و بطور کامل در اورد و از بدست آوردن سطر های که ویرایش شده یا تغییر یافته به طور کامل یه کویری یا اسکریپت دینامیک ساخت بدون این که ما دخالتی توش داشته باشیم
استفاده از پروسیجر برنامه رو وابسته به بانک اطلاعاتی میکنه, اگه خواستی بانک اطلاعاتی رو مثلا از اس کیو ال به اکسس تغییر بدی خیلی دردسر داری اما به روشی که من دنبالشم برنامه مستقل از بانک اطلاعاتی ساخته میشه و در صورت تغییر نوع بانک, فقط رشته اتصال تغییر پیدا میکنه.
اگر از متد پویا استفاده بشه موقع کد نویسی فقط ورودیهای یک متد سراسری رو تغییر میدهیم, متدی که بتوانیم برای تمام جداول بانک, بارها از آن استفاده کنیم.

samsam_ninja
جمعه 27 دی 1392, 21:08 عصر
به استرینگ کوئریم توجه کن...


string sql = "insert into KALA(K_name,K_D_id,K_vahed,K_detile) values('{0}',{1},'{2}','{3}')";
sql = string.Format(sql, name, id, vahed, detile);
Conncet();
DoIt(sql);
Disconnect();

momimomi
جمعه 27 دی 1392, 23:13 عصر
به استرینگ کوئریم توجه کن...


string sql = "insert into KALA(K_name,K_D_id,K_vahed,K_detile) values('{0}',{1},'{2}','{3}')";
sql = string.Format(sql, name, id, vahed, detile);
Conncet();
DoIt(sql);
Disconnect();

دوست عزیز لطف کن متد رو کامل مثل پست 16 بنویس
1- آیا این روش را برای جدول 10 فیلدی 5 فیلدی 20 فیلدی می توان استفاده کرد؟
2- ورودی هایش چیست؟
3- خروجی؟(نتیجه اجرای متد)؟

linux
شنبه 28 دی 1392, 15:12 عصر
اگر برای تمرین و یادگیری و آشنایی با ado.net هست که هیچ اگر برای استفاده در پروژه‌ها می خواهید دنبال dapper بگردید

Boy_nn
شنبه 28 دی 1392, 15:39 عصر
دوست عزیز میشه در مورد dapper بیشتر توضیح بدی

Mahmoud.Afrad
یک شنبه 29 دی 1392, 23:30 عصر
میتونی یه همچین چیزی پیاده سازی کنید.

class Column
{
public string Name { get; set; }
public SqlDbType Type { get; set; }
public object Value { get; set; }
}
private void Insert(string tableName, List<Column> columns)
{
SqlCommand cmd = new SqlCommand();
string str1 = "Insert Into " + tableName + "(";
string str2 = string.Empty;
foreach (Column col in columns)
{
string paramName = "@" + col.Name;
str1 += col.Name + ",";
str2 += paramName + ",";
cmd.Parameters.Add(paramName, col.Type).Value = col.Value;
}
str1 = str1.TrimEnd(',');
str2 = str2.TrimEnd(',');

cmd.CommandText = str1 + ") values(" + str2 + ");";
cmd.Connection = new SqlConnection("...");
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
}

برای حذف، ویرایش و سلکت به همین صورت رشته دستور رو بسازید. فقط برای سلکت ، آپدیت و امثالهم قسمت شرط رو هم در نظر بگیرید. و اینکه سلکت باید نوع برگشتی از نوع دیتاتیبل داشته باشد.

forodo
دوشنبه 30 دی 1392, 00:14 صبح
اینی که نوشتم درسته:؟ به Ali توجه کنید.

class Ali
{
public string Name { get; set; }
public SqlDbType Type { get; set; }
public object Value { get; set; }
}
private void Insert(string tableName, List<Ali> columns)
{

}

linux
دوشنبه 30 دی 1392, 09:08 صبح
دوست عزیز میشه در مورد dapper بیشتر توضیح بدی
http://www.nuget.org/packages/dapper
http://www.nuget.org/packages/Dapper.Rainbow/
http://www.nuget.org/packages/DapperExtensions/
http://en.wikipedia.org/wiki/Dapper_ORM




دپر یک میکرو orm هست که که چندتا هم افزودنی داره که دقیقا همین کاری که شما می خواهید را انجام می دهد.
سایت معروف stackover flow هم از این استفاده می کنه