我正在尝试从VB连接到SQL服务器。跨越网络的SQL服务器使用我的Windows登录进行身份验证。
我可以使用以下python代码访问服务器:
import odbc
conn = odbc.odbc('SignInspection')
c = conn.cursor()
c.execute("SELECT * FROM list_domain")
c.fetchone()
此代码工作正常,返回SELECT的第一个结果。但是,我一直在尝试在VB中使用SqlClient.SqlConnection,它无法连接。我尝试了几种不同的连接字符串,但这是当前的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim conn As New SqlClient.SqlConnection
conn.ConnectionString = "data source=signinspection;initial catalog=signinspection;integrated security=SSPI"
Try
conn.Open()
MessageBox.Show("Sweet Success")
''#Insert some code here, woo
Catch ex As Exception
MessageBox.Show("Failed to connect to data source.")
MessageBox.Show(ex.ToString())
Finally
conn.Close()
End Try
End Sub
它失败了,它给了我一个错误,上面写着“发生与网络相关或特定于实例的错误......(提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)< / p>
我很确定这是我的连接字符串,但我发现的任何内容都没有给我任何我需要使用的实例(server = mySQLServer不是一个可靠的例子)。
谢谢! -Wayne
答案 0 :(得分:3)
查看connectionstrings.com样本。看起来在你的python示例中,你是通过ODBC访问数据库。
您正在使用的字符串是与内置的.NET SQL Server数据库提供程序连接,因此您需要使用ODBC连接字符串或将数据源更改为实际的服务器名称(如果没有其他实例)或servername / instance名。
答案 1 :(得分:3)
您正在使用ODBC DSN作为SqlClient服务器名称。这不会起作用。您必须使用SqlClient连接字符串,对于SqlClient,DataSource属性是服务器名称或SQL Native Client服务器别名(与ODBC DSN不同)。
将signinspection
替换为SQL Server主机的实际名称。如果是命名实例或侦听非默认端口,则必须同时指定,例如:hostname\instancename
答案 2 :(得分:2)
确定您的服务器和数据库具有相同的名称?
这里有一个链接,允许您生成连接字符串并对其进行测试
http://blogs.msdn.com/dhejo_vanissery/archive/2007/09/07/One-minute-Connection-string.aspx
答案 3 :(得分:1)
好吧,我继续使用ODBC连接。这似乎是我首先想要的。
为了使用ODBC我必须转到http://support.microsoft.com/kb/310985并安装一些文件。按照指示,我想出了以下代码似乎工作正常:
Dim conn As OdbcConnection
conn = New OdbcConnection("DSN=SignInspection")
Dim mystring as String = "SELECT * FROM list_domain"
Dim cmd As OdbcCommand = New OdbcCommand(mystring, conn)
Dim reader As OdbcDataReader
Dim columnCount As Integer
Dim output As String
Dim data as Object() = New Object(10) {}
conn.Open()
MsgBox("Connected!")
reader = cmd.ExecuteReader()
While reader.Read()
columnCount = reader.GetValues(data)
output = ""
For i As Integer = 0 To columnCount - 1
output = output & " " & data(i).ToString()
Next
Debug.WriteLine(output)
End While
conn.Close()
当然我会清理它很多,但我想也许有人最终会找到相同的解决方案,也许他们会在花费太多时间之前看到我的代码。
编。 columsCount - &gt; columCount
答案 4 :(得分:0)
您可能需要查看Microsoft Enterprise Library
Data Access Application Block
,以便更轻松地连接和支持多个基础数据存储。
成功! =)