无法通过HeidiSQL连接到LocalDB

7
我一直试图使用最新版本的heidiSQL连接到本地db实例,但一直无法成功。
我按照这里的答案的指示进行尝试,但似乎不起作用(不再起作用): HeidiSql connection to MS SQL Server LocalDB 我尝试了以下操作:
1)heidisql -d = LocalDB -h =%pipename%-n = 3 -d = LocalDB
2)heidisql -d = LocalDB -h = np:\。 \ pipe \ LOCALDB#41CF9FCB \ tsql \ query -n = 3 -d = LocalDB(我意识到号码每次启动新的localdb实例时都会改变)
3)heidisql -d = LocalDB -h = 41CF9FCB -n = 3 -d = LocalDB
有什么想法吗?
编辑 Error message

LocalDB 是一种进程内数据库。如果没有启动它,任何人都无法连接到它。在尝试连接之前,您是否已经启动了它? - Panagiotis Kanavos
你尝试使用HeidiSQL的会话管理器连接吗?这比使用有限的命令行语法更方便。 - Anse
@Panagiotis 是的,每次我尝试连接时,本地数据库服务都在运行。 回答:我尝试使用HeidiSQL的会话管理器连接(使用“使用Windows身份验证选项”),但结果相同。 - Marios T.
3个回答

19

以下是我的Web.config文件中的连接字符串:

<add name="WEDOBADGEDatabase" connectionString="Data Source=(LocalDb)\development;Initial Catalog=WEDOBADGE;AttachDBFilename=|DataDirectory|\DevelopmentDatabase.mdf;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />

最重要的信息是Data Source=(LocalDb)\development,请将C:\Program Files\Microsoft SQL Server\120\替换为正确的路径并在连接字符串中选择正确的名称,然后在Data Source=(LocalDb)\之后使用连接字符串中选择的名称(不区分大小写,在我的情况下为development)。尝试:

"C:\Program Files\Microsoft SQL Server\120\Tools\Binn\SqlLocalDB.exe" info Development

这应该输出类似于:

Name:               Development
Version:            12.0.2000.8
Shared name:
Owner:              hostname\username
Auto-create:        No
State:              Running
Last start time:    8/2/2016 3:20:57 PM
Instance pipe name: np:\\.\pipe\LOCALDB#CDE5547F\tsql\query

将实例管道名称中的初始np:去掉,从"Instance pipe name"中复制\\.\pipe\LOCALDB#CDE5547F\tsql\query。此外,您的管道名称可能与我的不同。

然后您可以像这样在HeidiSQL中创建一个新会话:

输入图片描述

注意:"网络类型"、"主机名/IP"和"使用Windows身份验证"很重要;而其他设置(如"数据库")则由您自己决定,因此您可以将它们留空/跳过等。

感谢https://dev59.com/fl8e5IYBdhLWcg3wTI-L#33748584提供的管道名称建议。


1
很好的答案。那么,SQL Server Management Studio是如何避免这种情况的呢?我猜它可以直接查询服务以获取随机哈希值。 - Francois Botha

0

从 heidisql.exe 修订版 9.3.0.5108 开始,您还可以:

  1. 使用 "C:\Program Files\Microsoft SQL Server\120\Tools\Binn\SqlLocalDB.exe" start "MSSQLLocalDB" 启动数据库
  2. "C:\Program Files\Microsoft SQL Server\120\Tools\Binn\SqlLocalDB.exe" info "MSSQLLocalDB" 中读取“实例管道名称”(例如:\\.\pipe\LOCALDB#1B9DCF1E\tsql\query
  3. 使用 "C:\Program Files\HeidiSQL\heidisql.exe --nettype=3 --host="\\.\pipe\LOCALDB#1B9DCF1E\tsql\query" --winauth=1" 启动 HeidiSQL

我使用一个 Bash 脚本来自动化所有这些操作,大致如下:

shopt -s expand_aliases
alias __sqllocaldb='/c/Program\ Files/Microsoft\ SQL\ Server/120/Tools/Binn/SqlLocalDB.exe'
alias __heidisql='/c/Program\ Files/HeidiSQL/heidisql.exe'
__sqllocaldb start  "Development"
hostname=$(__sqllocaldb info  "Development" | tail -1 | sed 's/\(Instance pipe name: np:\)//')
__heidisql --nettype=3 --host="$hostname" --winauth=1

0
这是一个AutoHotkey脚本,可以自动化一切,从复制DB实例名称到打开、粘贴和连接服务器。

(如果速度太快,请调整Sleep)
#NoEnv
SetWorkingDir %A_ScriptDir%
#Warn
CoordMode, Mouse, Window
SendMode Input
#SingleInstance Force
SetTitleMatchMode 2
SetTitleMatchMode Fast
DetectHiddenWindows On
DetectHiddenText On
#WinActivateForce
#NoTrayIcon
SetControlDelay 1
SetWinDelay 0
SetKeyDelay -1
SetMouseDelay -1
SetBatchLines -1
#Persistent


HeidiSQLConnectToSSMS:
batch := 
(LTrim
"sqllocaldb start MSSQLLocalDB
for /f ""tokens=3 delims=:"" `%`%i IN ('sqllocaldb info MSSQLLocalDB ^| findstr ""Instance pipe name:""') do set sqlConn=`%`%i
set /p =""`%sqlConn`%""<nul | clip"
)  ; batch
FileDelete, sqlConn.bat  ; sqlConn.bat
FileAppend, %batch%, sqlConn.bat  ; sqlConn.bat
RunWait, sqlConn.bat, , Hide  ; sqlConn.bat
Run, C:\Program Files\HeidiSQL\heidisql.exe  ; HeidiSQL
WinWait, Session manager ahk_class Tconnform ahk_exe heidisql.exe  ; HeidiSQL
Sleep, 333
WinActivate, Session manager ahk_class Tconnform ahk_exe heidisql.exe  ; HeidiSQL
Sleep, 333
ControlClick, TButton4, ahk_class Tconnform ahk_exe heidisql.exe,, Left, 1,  NA  ; New
Sleep, 100
ControlFocus, ComboBox1, ahk_class Tconnform ahk_exe heidisql.exe  ; Network Type
Sleep, 100
ControlSend, ComboBox1, {Home}, ahk_class Tconnform ahk_exe heidisql.exe  ; Select Microsoft SQL Server (named pipe)
Sleep, 100
Loop, 5  ; Select Microsoft SQL Server (named pipe)
{
    ControlSend, ComboBox1, {Down}, ahk_class Tconnform ahk_exe heidisql.exe  ; Select Microsoft SQL Server (named pipe)
    Sleep, 100
}
ControlClick, TCheckBox1, ahk_class Tconnform ahk_exe heidisql.exe,, Left, 1,  NA  ; Use Windows authentication
Sleep, 100
Loop, 2  ; Set Hostname / IP:
{
    Send, {Shift Down}{Tab}{Shift Up}  ; Set Hostname / IP:
    Sleep, 100
}
SendRaw, %CLIPBOARD%  ; Set Hostname / IP:
Sleep, 200
ControlClick, TButton7, ahk_class Tconnform ahk_exe heidisql.exe,, Left, 1,  NA  ; Save
Sleep, 100
Send, {Enter}  ; Connect
Sleep, 100
FileDelete, sqlConn.bat  ; sqlConn.bat
ExitApp  ; ExitApp
Sleep, 100
Return

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接