PDA

View Full Version : queryinterface for interface sqldmo.namelist failed



tayebeh
دوشنبه 02 بهمن 1385, 15:31 عصر
باسلام
من با vb2003.net کار می کنم . می خواهم لیست تمام sqlserverهای روی شبکه رو در یک کومبوباکس نمایش بدهم . کد زیر رو می نویسم ولی error می ده .



Dim i As Integer

goSQLServerDMOApp = New SQLDMO.ApplicationClass
Dim namX As SQLDMO.Names
namX = goSQLServerDMOApp.ListAvailableSQLServers()
For i = 1 To namX.Count
cmbserver.Items.Add(namX.Item(i))
Next
cmbserver.SelectedIndex = -1

این error هستش :

queryinterface for interface sqldmo.namelist failed
در ضمن این کد در وبی 6 به خوبی کار می کنه ولی در 2003 مشکل داره .
باتشکر
راستی من وقتی کدهامو در ادیتور برنامه نویس می نویسم ، آشفته و قاطی - پاطی می شن . باید چیکار کنم که این مشکل واسم پیش نیاد؟

whitehat
دوشنبه 02 بهمن 1385, 16:34 عصر
دوست عزیز من زیاد با VB.net کار نکردم بنابراین کد آنرا با C# می نویسم، امیدوارم مورد استفاده قرار بگیره.برای این کار شما باید از کلاس SqlDataSourceEnumerator استفاده کنید.


System.Data.DataTable dt = new DataTable();
dt = System.Data.Sql.SqlDataSourceEnumerator.Instance.G etDataSources();
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["ServerName"].ToString());
}
Console.ReadLine();

راستی من وقتی کدهامو در ادیتور برنامه نویس می نویسم ، آشفته و قاطی - پاطی می شن . باید چیکار کنم که این مشکل واسم پیش نیاد؟شما باید کد خود را در تگ [ code ] بگذارید و بعد آنرا ببندید (به راهنمای سایت توجه کنید)

لطفا در صورتی که جواب گرفتید پست خود را از بخش پایگاه داده پاک کنید و به قوانین سایت بیشتر توجه کنید.
با تشکر

programmermp
دوشنبه 02 بهمن 1385, 16:37 عصر
راستی من وقتی کدهامو در ادیتور برنامه نویس می نویسم ، آشفته و قاطی - پاطی می شن . باید چیکار کنم که این مشکل واسم پیش نیاد؟

سلام

کدهاتون رو به شکل زیر بنویسید

کلمه code رو داخل علامت قلاب یا [] قرار بدید بعد کدهاتون رو بنویسید و اخر هم

کلمه /code را داخل علامت قلاب قرار بدید علامت / باید اخرش باشه

در مورد کد بالا هم تست می کنم و بهتون نتیجه رو می گم

programmermp
دوشنبه 02 بهمن 1385, 17:04 عصر
سلام

کد شما که برای من تعداد سرورها رو صفر بر می گردوند

ولی این کد زیر کد تبدیل شده اقای whitehat هست ببین برای شما کار می کنه یا نه




Dim dt As System.Data.DataTable
dt = New DataTable()
dt = System.Data.Sql.SqlDataSourceEnumerator.Instance.G etDataSources()
ForEach dr As DataRow In dt.Rows
Console.WriteLine(dr("ServerName").ToString())
Next dr



در ضمن می تونی به جای خطی که توش console نوشته از کد زیر هم استفاده کنی که

نام سرور ها رو توی listbox می ریزه



ListBox1.Items.Add((dr("ServerName").ToString))

به من هم خبرشو بده

tayebeh
سه شنبه 03 بهمن 1385, 07:06 صبح
باسلام
من با دات نت فریم ورک 1 کار می کنم و همچین کلاسی نمی بینم . احتمالا شما با ورژن دیگه ای ازدات نت فریم ورک کار می کنید . درسته؟

programmermp
سه شنبه 03 بهمن 1385, 09:25 صبح
باسلام
من با دات نت فریم ورک 1 کار می کنم و همچین کلاسی نمی بینم . احتمالا شما با ورژن دیگه ای ازدات نت فریم ورک کار می کنید . درسته؟


بله فکر کنم شما باید ارتقا بدید نسخه وی بی تون رو من از وی بی دات نت 2005 با

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

در ضمن در مورد ارتقا وی بی هم بگم فکر کنم اگه صبر کنید بهتر باشه چون نسخه اخرش

برای سال 2005 بود و امسال سال 2007 هست احتمالش هست که مایکروسافت حرفی

از نسخه جدید پیش بکشه

بازهم هیچی معلوم نیست ممکنه بره تا اخر سال 2007

whitehat
سه شنبه 03 بهمن 1385, 09:34 صبح
من با دات نت فریم ورک 1 کار می کنم و همچین کلاسی نمی بینم . احتمالا شما با ورژن دیگه ای ازدات نت فریم ورک کار می کنید . درسته؟ببخشید من به صورت سوال توجه نکردم ، درسته من با 2005 این کد را نوشتم .برای این کار در 2003 می توانید از SQLDMO استفاده کنید .البته راههای دیگری نیز وجود دارد ، تابعی برای این کار در SQL وجود دارد اما آنرا به خاطر ندارم !
ابتدا Microsoft SQLDMO را به Refrence های خود اضافه کنید (در تب COM می توانید آنرا پیدا کنید)سپس از کد زیر استفاده کنید:


SQLDMO.ApplicationClass mSQL=new SQLDMO.ApplicationClass();
SQLDMO.NameList mServerNames =mSQL.ListAvailableSQLServers();
foreach (string str in mServerNames )
{
this.listBox1.Items.Add(str);
}
اگر دوستان لطف کنند آنرا به VB تبدیل کنند

whitehat
سه شنبه 03 بهمن 1385, 09:41 صبح
اینم کد VB (نمی دونم تابع foreach در VB چرا error می دهد)


Dim mSQL As New SQLDMO.Application()
Dim mServerNames As SQLDMO.NameList
Dim i As Integer

mServerNames = mSQL.ListAvailableSQLServers
For i = 1 To mServerNames.Count
Me.listBox1.Items.Add(mServerNames.Item(i))
Next
کلید جستجو : SQL Server List - لیست سرور های SQL - شبکه - ServerList - SQLServerList

programmermp
سه شنبه 03 بهمن 1385, 10:37 صبح
سلام

اقای white hat هیچ کدوم از کدهای بالا برای من جواب نداد یعنی هیچ مقداری به listbox

اضافه نمی شه نمی دونم باید توی شبکه برنامم باشه تا جواب بده یا اینکه نیازی به شبکه

نیست و باید با sqldmo ارتباط به دیتابیس رو اول برقرار کنم تا کد ی که گفتید جواب بده

در ضمن این مشخصات سیستم بنده هست

ویندوز xp سرویس پک 2

dotnet framework2

microsoft visual studio 2005

حالا مشکل از کجاست که مقدار بر نمی گردونه ؟

whitehat
سه شنبه 03 بهمن 1385, 11:31 صبح
بر روی Local تست نکردم اما بر روی شبکه (در صورتی که فایروال مانع آن نشود) بخوبی کار می کند. در حالتی که به شبکه وصل نباشید کد شما کار نخواهد کرد. اما اگر می خواهید نام سرور Local را بدست آورید راههای مختلفی وجود دارد. مثل استفاده از hostname در کلاس socket یا ...

tayebeh
سه شنبه 03 بهمن 1385, 13:24 عصر
با سلام
جناب آقای whitehat کد جنابعالی دقیقا مثل کد اولیه خود من هست . همانطور که قبلا گفتم این کد در وبی 6 و در سی جواب می ده ولی در وبی دات نت 2003 جواب نمی ده . حالا چراشو نمی دونم . فقط یه کمی که سرچ کردم چندجا نوشته بودند که باید آخرین پکهای اس کیو ال سرور 2000 رو نصب کنم تا این مشکل حل بشه . نمی دونم در نسخه 2005 اس کیوال سرور این مشکل هست یا نه ؟
بیشتر تلاش می کنم و چنانچه به جواب رسیدم ، حتما اینجا توضیح می دم .
باتشکر

whitehat
سه شنبه 03 بهمن 1385, 14:14 عصر
این کد در vb.net 2003 جواب داد.
آیا شما dll مربوطه را import می کنید؟
در صورتی که error خاصی می گیرید ، در اینجا درج کنید.

tayebeh
چهارشنبه 04 بهمن 1385, 06:49 صبح
این کد در vb.net 2003 جواب داد.
آیا شما dll مربوطه را import می کنید؟
در صورتی که error خاصی می گیرید ، در اینجا درج کنید.



چه ddl هست ؟

whitehat
چهارشنبه 04 بهمن 1385, 09:21 صبح
- در پنجره Solution خود بر روی refrences راست کلیک کنید.
- سپس Add Refrences را انتخاب کنید
- تب COM را انتخاب کنید
- Microsoft SQLDMO Object Library را انتخاب کنید
-----------------
سپس برای استفاده از آن کد زیر را به ابتدای پروژه اضافه کنید(پس از این کار Namespace SQLDMO به لیست فضاهای نام شما اضافه شده)


using SQLDMO

(فکر می کنم در VB باید از import استفاده کنید)