السلام عليكم
كيف استطيع ان اعرف بان لنك السيرفر الذي اريد ان اتصل به متوقف او يعمل
linkeserver is work isn't out work
السلام عليكم
كيف استطيع ان اعرف بان لنك السيرفر الذي اريد ان اتصل به متوقف او يعمل
linkeserver is work isn't out work
تم تعديل هذه المشاركة بواسطة mkyh86 في 10 أكتوبر 2013 في 14:18
شو قصدك با link? network?
اذا network استعمل PING
SQL SERVER يمكن ان يكون متوقفا اذا كانت Network link موجودة ولكن SQL SERVER SERVICE متوقفة
اذا اردت ان تعرف بكلتا الحالتين يمكنك تجربة الكود التالي وهو نفس طريقة الاتصال العادية باستثناء وجود Connection Timeout وعدم وجود اسم database
وهناك حالات حيث يكون network موجود وserver sql server شغالة ولكنك لا تستطيع الاتصال بسبب firewall
على اي حال هذا ما استعمله
Function IsSQLServerRunning(ByVal server_name_or_ip As String, sql_instance_name As String ,userid As String ,password As String) As String
Dim answer As String = ""
' FIRST PING THE SERVER
Dim ACTIVE = My.Computer.Network.Ping(server_name_or_ip)
If ACTIVE = True
answer = "Yes Network "
Else
answer = "No Network "
End If
' SECOND TEST CONNECTION WITHOUT USING "Initial Catalog"
Dim conn_str = "Data Source={0};Persist Security Info=True;User ID={1};Password={2};Connection Timeout=1"
conn_str = String.Format(conn_str,sql_instance_name,userid,password)
Dim sql_conn As New SqlClient.SqlConnection(conn_str)
Try
sql_conn.Open
answer += "Yes Connection"
Catch ex As Exception
answer += "No Connection"
End Try
MsgBox(answer)
Return answer
End Functionليس دائما يكون اسم server هو نفسه اسم sql server instance لذلك وضعت 2 parameter
قصدي انا عامل linked servers
رباط سيرفرين معاً اريد التاكد بان السيرفر الاخر الذي اخذ منه بيانات هو يعمل يعني الحاسبة التي تحتوي على السيرفر الاخر غير مغلقة
انا حليتها بان اعمل على جلب بعض البيانات وعند حصول غطأ يظهر مسج بوكس يقول السيرفر غير متصل ولا يستطيع جلب البيانات منه
ولكن هل يوجد شفرة اخرة لان عندما يتاكد من السيرفر يعمل ياخذ وقت ثم يظهر لي المسج بوكس
يوجد Stored Procedure جاهز من ضمن الاجراءات المخزنة داخل برنامج SQL Server يقوم بفحص LinkedServers اذا كانت تعمل أم لا اسمه
EXEC sp_testlinkedserver myLinkedServer
ومن الطبيعي ان يأخذ وقت لكي تتم عمليه الفحص
يمكنك استخدام هذا الاجراء في شاشة تسبق فتح البرنامج لفحص الاتصال ووضع الرسالة المناسبة وقت الاقلاع والتي تظهر للمستخدم بان السيرفر غير متاح
مثال
قم بانشاء اجراء مخزن يفحص حالة linked server
USE [master] GO /****** Object: StoredProcedure [dbo].[myLinkedServer] Script Date: 10/14/2013 11:28:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[myLinkedServer] as begin EXEC sp_testlinkedserver myLinkedServer end
ثم بكتابة الكود الذي سيعمل وقت الاقلاع بالشكل الذي يناسبك او كالمثال التالي
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim sqlcon As New SqlConnection("Server=.\ITPROF;Database=master;trusted_connection=yes")
Dim cmd As New SqlCommand("myLinkedServer", sqlcon)
cmd.CommandType = CommandType.StoredProcedure
sqlcon.Open()
cmd.ExecuteNonQuery()
sqlcon.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Classالنتيجة
بالتوفيق

