pingguo002 发表于 2017-7-3 16:06:24

怎么遍历数据库,找到sql服务器

之前搜到c#的代码,遍历数据库找到sql server 服务器主机名。不够精确,把局域网里面所有装了sql server的机器都搜索出来了。
想搜索数据库名 xxx的服务器,查到服务器名称。
想问问用什么命令查

pingguo002 发表于 2017-7-5 09:57:27

我粘一下c#的编码,遍历局域网内数据库using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.Sql;

class Program
{
    static void Main()
    {
      // Retrieve the enumerator instance and then the data.
      SqlDataSourceEnumerator instance =
          SqlDataSourceEnumerator.Instance;
      System.Data.DataTable table = instance.GetDataSources();

      // Display the contents of the table.
      DisplayData(table);

      Console.WriteLine("Press any key to continue.");
      Console.ReadKey();
    }

    private static void DisplayData(System.Data.DataTable table)
    {
      foreach (System.Data.DataRow row in table.Rows)
      {
            foreach (System.Data.DataColumn col in table.Columns)
            {
                Console.WriteLine("{0} = {1}", col.ColumnName, row);
            }
            Console.WriteLine("============================");
      }
    }
}

pingguo002 发表于 2017-7-5 10:03:37


这是执行效果,找出一堆sql server 机器,实际上,只有pingpingpi; win-90e38rraj34 两个有 myhis数据库

只找出带myhis的主机名,去掉其他的

c#我搞不明白,看看有没有简单的方法

kk_lee69 发表于 2017-7-5 12:07:44

回复 3# pingguo002


    你確定這是所有的語法嗎?? 看起來這段 像是在查詢比對資料庫是不是有你要的

至於 有多少 資料庫主機看起來 語法裡面好像看不到

pingguo002 发表于 2017-7-5 14:51:33

是这段代码,图发错了;
这个代码运行完显示的是英文的。内容一样
刚才运行过

http://blog.csdn.net/zhaojie2013/article/details/20038981
链接

kk_lee69 发表于 2017-7-7 11:41:16

回复 1# pingguo002


    這個問題 我還蠻關注的

不過我也想不到方法.........幫你推一下


不過我想請問你的問題是

想要找 區網內的 所有 資料庫主機 還是

要找 某一台主機上的 所有資料庫資料呢??

有 找 區網內的 所有 資料庫主機 的方法嗎??

pingguo002 发表于 2017-7-11 10:25:16

谢谢!
情况是这样的,我的客户用的his系统,只有一台主机,安装ms sql server数据库。有n个分机,
分机不安装sqlserver。
我只需要找到主机的计算机名,填到分机的配置文件里就ok
客户经常出现,分机找不到主机的情况,人工电话解决太麻烦了。
想做个简单工具解决连接问题,我现在找到一个C#的方法,主机运行一个程序做广播,分机接收。
http://www.cnblogs.com/zhangbaochong/p/4944894.html
C#的可移植性一般,一少部分客户运行失败。不是最佳方案

这段代码我用vs2008编译报错,现在安装个vs2010试试

kk_lee69 发表于 2017-7-11 10:36:28

回复 7# pingguo002

我覺得有幾個疑問 請教

1. 主機 沒有固定的內部IP 嗎?? 怎麼會找不到主機
2. 分機上的 配置文件裡是 採用 電腦名稱 還是 IP
3. 當你的 配置文件 無法找到主機時?? 此時 主機的IP 是變動了還是 換位置了??
4. 如果是網路狀況的話不管你怎麼改配置 應該都是不通吧
5. 如果 你只是 為了回填 主機位置不需要這麼麻煩吧最簡單方法 在共用位置 開個文件主機回報自己資料 到文件,分機 讀取文件也可行 不是??

pingguo002 发表于 2017-7-12 11:02:33

1客户经常改ip,切换内外网用;客户经常重装系统
2分机用计算名ip 都可以
4网络不通的时候也有,客户自己不会判断网络通不通,电话沟通非常难。客户使用内外,不能远程调试
5客户网络类型都不固定,没有规范,有双网同时接入的,双网卡的,交换机直连(不用路由器),路由器直连。

kk_lee69 发表于 2017-7-12 12:02:48

本帖最后由 kk_lee69 于 2017-7-12 12:03 编辑

回复 9# pingguo002

呵呵那你 解決了嗎??

你只是要得到IP不介意用廣播的話
並且 可以 可以接受 SERVER端CLINE 端都要安裝的話 倒是
有解決辦法

簡單的做法就是線上很多 聊天軟件的案例   這個需要兩端廣播 溝通

這段程式碼就可以解決問題

pingguo002 发表于 2017-7-14 15:49:30

http://www.cnblogs.com/zhangbaochong/p/4944894.html
算有个解决方案,先用这个方法做个小插件,主机运行一下,分机再运行,取主机名,填表。
C#必须装framwork才能运行,这点麻烦。
c++的代码没运行成功,只能用c#了。

kk_lee69 发表于 2017-7-14 18:09:03

回复 11# pingguo002


找到解決方法

給你一個 列出 區網所有 MSSQL 主機的 語法

至於 這台主機裡面是否有你要的資料庫這個部分 還得自己在修改

#include <Array.au3>

$aCompList2 = _netwerklist(0x4)
TCPStartup()

DIM $aCompList3

FOR $i=1 TOUBound($aCompList2)-1 Step 1
        $aCompList3[$i]=$aCompList2[$i]
        $aCompList3[$i]=TCPNameToIP($aCompList2[$i])
Next

TCPShutdown()

_ArrayDisplay($aCompList3)


Func _netwerklist($iSrvType = -1, $sDomain = '')
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res = , $i
    Local $uRecord = DllStructCreate("dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char")
    Local $uDomain = DllStructCreate("byte"), $pDomain = 0
    If Not ($sDomain = '' Or $sDomain = '*') Then
      DllStructSetData($uDomain, 1, StringToBinary($sDomain, 2))
      $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall("netapi32.dll", "int", "NetServerEnum", _
            "ptr", 0, "int", 100, _
            "ptr", DllStructGetPtr($uBufPtr, 1), "int", -1, _
            "ptr", DllStructGetPtr($uBufPtr, 2), _
            "ptr", DllStructGetPtr($uBufPtr, 3), _
            "int", $iSrvType, "ptr", $pDomain, "int", 0)
    If $ret Then Return SetError(1, $ret, '')
    Local $res =
    For $i = 1 To DllStructGetData($uBufPtr, 3)
      Local $uRecord = DllStructCreate("dword;ptr", DllStructGetData($uBufPtr, 1) + ($i - 1) * $iRecLen)
      Local $sNBName = DllStructCreate("byte", DllStructGetData($uRecord, 2))
      DllStructSetData($uString, 1, BinaryToString(DllStructGetData($sNBName, 1), 2))
      $res[$i] = DllStructGetData($uString, 1)
    Next
    $ret = DllCall("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr, 1))
    Return $res
EndFunc   ;==>_netwerklist

pingguo002 发表于 2017-7-17 15:01:45

谢谢,非常棒的代码!
页: [1]
查看完整版本: 怎么遍历数据库,找到sql服务器