英文:
Azure Hybrid Connection Not finding MS SQL Server
问题
I am trying to use an Azure Hybrid connection on a Linux Azure Web App. When I connect to a Hybrid connection on my local computer, it works with no problem. I just enter the Computer name, and the SQL port, and create my connection string. This returns the expected results.
When I change it to work on the Prod Server, I run into issues.
My connection code in python using Flask:
def get_cursor():
server = current_app.config['SERVER']
database = current_app.config['DATABASE']
db_username = current_app.config['DB_USERNAME']
db_password = urllib.parse.quote_plus(current_app.config['DB_PASSWORD'])
db_password = current_app.config['DB_PASSWORD']
print(db_password)
db_port = current_app.config['DB_PORT']
params = urllib.parse.quote_plus("DRIVER={ODBC Driver 17 for SQL Server};"
f"SERVER={server};"
f"DATABASE={database};"
f"PORT={db_port};"
f"UID={db_username};"
f"PWD={db_password}")
my_stirng = (f"mssql+pyodbc:///?odbc_connect={params}")
print(my_stirng)
engine = sa.create_engine(f"mssql+pyodbc:///?odbc_connect={params}")
connection = engine.raw_connection()
return connection.cursor()
My Hybrid connection in Azure:
Then my Sql Server I want to connect with the:
My Hybrid Connection Manager:
Finally, things I have checked or tried:
Checked that TCP/IP is enabled and has a static Port
I changed the computer name to the full name. So instead of SQL01, it is SQL01.fireball.ads
Ensured ODBC 17 for SQL Server is installed driver
When I run my app, I get a timeout error:
sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('HYT00', '[Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
(Background on this error at: https://sqlalche.me/e/14/e3q8)
To me it looks like the server and connection manager do see one another. However, it can't locate the SQL instance on the port. It seems like it being a named instance is what is giving me problems.
My endpoint in the AHC is:
sql01.fireball.ads:1435
and my server in my connections string is:
sql01\sql2016_01
Any help would be appreciated.
英文:
I am trying to use an Azure Hybrid connection on a Linux Azure Web App. When I connect to a Hybrid connection on my local computer, it works with no problem. I just enter the Computer name, and the SQL port, and create my connection string. This returns the expected results.
When I change it to work on the Prod Server, I run into issues.
My connection code in python using Flask:
def get_cursor():
server = current_app.config['SERVER']
database = current_app.config['DATABASE']
db_username = current_app.config['DB_USERNAME']
db_password = urllib.parse.quote_plus(current_app.config['DB_PASSWORD'])
db_password = current_app.config['DB_PASSWORD']
print(db_password)
db_port = current_app.config['DB_PORT']
params = urllib.parse.quote_plus("DRIVER={ODBC Driver 17 for SQL Server};"
f"SERVER={server};"
f"DATABASE={database};"
f"PORT={db_port};"
f"UID={db_username};"
f"PWD={db_password}")
my_stirng = (f"mssql+pyodbc:///?odbc_connect={params}")
print(my_stirng)
engine = sa.create_engine(f"mssql+pyodbc:///?odbc_connect={params}")
connection = engine.raw_connection()
return connection.cursor()
My Hybrid connection in Azure:
Then my Sql Server I want to connect with the:
My Hybrid Connection Manager:
Finally, things I have checked or tried:
Checked that TCP/IP is enabled and has a static Port
I changed the computer name to the full name. So instead of SQL01, it is SQL01.fireball.ads
Ensured ODBC 17 for SQL Server is installed driver
When I run my app, I get a timeout error:
sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
(Background on this error at: https://sqlalche.me/e/14/e3q8)
To me it looks like the server and and connection manager do see one another. However it can't locate the sql instance on the port. It seems like it being a named instance is what is giving me problems.
My endpoint in the AHC is:
sql01.fireball.ads:1435
and my server in my connections string is:
sql01\sql2016_01
Any help would be appreciated.
答案1
得分: 0
PORT不是ODBC连接字符串的关键字。您尝试过使用SERVER=tcp:YourServerNameOrIpAddress,PortNumber吗?逗号分隔服务器和端口。
我更改了那一行,端口对齐,允许我连接。
英文:
As @AlwaysLeaning posted in the comments:
PORT is not an ODBC Connection String keyword. Have you tried to use SERVER=tcp:YourServerNameOrIpAddress,PortNumber; where the comma delimits the server and port?
I changed that line, and the ports lined up, allowing me to connect
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论