PDA

View Full Version : سوال: گرفتن نام جداول دیتابیس



hercool
شنبه 26 مرداد 1392, 09:35 صبح
سلام دوستان
یه سوال چطور میشه نام جداول یک دیتابیس رو گرفت من هر کاری کردم فقط نام دیتابیس رو بر می گردونه نه نام جدوالش رو
SqlConnection con = new SqlConnection("Data Source=MASOUD\\SQLEXPRESS;Initial Catalog=hesab;Integrated Security=True");

con.Open();
DataTable t = con.GetSchema("Tables");
foreach (DataRow row in t.Rows) { int i = 0; MessageBox.Show("name is" + row[i].ToString()); i++; }


یا
public static List<string> GetTables(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
DataTable schema = connection.GetSchema("Tables");
List<string> TableNames = new List<string>();
foreach (DataRow row in schema.Rows)
{
int i = 0;
TableNames.Add(row[i].ToString()); i++;
}
return TableNames;
}
}

saied_hacker
شنبه 26 مرداد 1392, 13:35 عصر
این کد کاملا درسته و نام تمامی جداول رو بر میگردونه فقط مشکل کد شما اینه که هر با i++ می کنید و جد صفرش میکنید ( کلا اضافس )
شما اگه کد های داخل حلقه رو بررسی کنید که هر row چهار تا ابجک داره:

0: data base name
1: data base owner
2: table name
3 : ???????

شما برای این که اسم تیبل رو بگیری باید اینجوری بنویسی
foreach (DataRow row in schema.Rows)
{
TableNames.Add(row[2].ToString());
}

arefba
شنبه 26 مرداد 1392, 14:16 عصر
این کار رو با sql query هم میشه انجام داد بدون زحمت

hercool
شنبه 26 مرداد 1392, 18:59 عصر
سعید جان ممنون بابت پاسخت اما نام جدول رو بهم نشون نمیده
برام این رو تو مسیج باکس که از تابع مقدار گرفته نشون میده
system.collection.generic.list 1[system.string].

عارف جان ممنون اما ممنون میشم اگه نمونه کدی داری اینجابزاری

khokhan
شنبه 26 مرداد 1392, 19:16 عصر
یه سوال چطور میشه نام جداول یک دیتابیس رو گرفت من هر کاری کردم فقط نام دیتابیس رو بر می گردونه نه نام جدوالش رو نمایش جداول وفیلدهای دیتابیس با تری ویو و لیست البته این نمونه قسمتی از یه پروژه هست ......

arefba
شنبه 26 مرداد 1392, 19:32 عصر
SQL Server 2005 or 2008:

SELECT * FROM information_schema.tables

SQL Server 2000:

SELECT * FROM sysobjects WHERE xtype='U'

saied_hacker
شنبه 26 مرداد 1392, 19:45 عصر
سعید جان ممنون بابت پاسخت اما نام جدول رو بهم نشون نمیده
برام این رو تو مسیج باکس که از تابع مقدار گرفته نشون میده
system.collection.generic.list 1[system.string].

عارف جان ممنون اما ممنون میشم اگه نمونه کدی داری اینجابزاری

برای نمایش چه کدی نوشتی کد بالا مشکلی نداره ....
شما بک breakpoint توی حلقه بزار بعد هربار row و itemArray ش رو چک کن میبیی که نام ها رو بر میگرونه...

hercool
شنبه 26 مرداد 1392, 20:34 عصر
میگه مقدار count برابر صفر هست
mas = GetTables("Data Source=MASOUD\\SQLEXPRESS;Initial Catalog=hesab;Integrated Security=True");
MessageBox.Show("" + mas);