我一直在努力工作,试图从Lambda函数或AWS Linux EC2实例获取SQL Server连接而没有运气。
我开始在Windows中运行.NET Core并使用System.Data.SqlClient在那里成功编写/查询。然后我尝试将其移动到AWS Lambda函数中。似乎库没有任何问题,而是在尝试打开数据库连接时总是遇到此错误:
未处理的异常:System.Data.SqlClient.SqlException:A 建立时发生与网络相关或特定于实例的错误 与SQL Server的连接。服务器未找到或未找到 无障碍。验证实例名称是否正确以及SQL 服务器配置为允许远程连接。 (提供者:TCP 提供程序,错误:40 - 无法打开与SQL Server的连接)
然后我决定在Ubuntu Linux(16.04)中使用相同的代码,并且能够成功地将数据写入/查询到那里的SQL Server数据库。接下来,我尝试在AWS Linux AMI中运行完全相同的代码(因为这些是AWS Lambda运行的代码),并且收到了完全相同的错误代码。然后我尝试使用Entity Framework进行尝试并得到完全相同的错误。
有没有人成功这样做?如果是这样,我希望能够更多地了解您的具体方法。或者,也有人知道这是不可能的吗?
我会粘贴下面的代码片段,即使我不相信这是问题(相同的代码在Ubuntu中工作但在AWS Linux中不起作用)。注意:这是一个模拟数据库,只是为了测试。这似乎是一个司机问题,但很难确定。
using System;
using System.IO;
using System.Data.SqlClient;
namespace CSharpLambdaFunction
{
public class Program
{
public static void Main() {
LambdaHandler.myHandler();
}
}
public class LambdaHandler
{
public static void myHandler()
{
SqlConnection myConnection = new SqlConnection("user id=usernamehere;" +
"password=passwordhere;server=serveraddresshere;" +
"database=test; " +
"connection timeout=30");
try
{
myConnection.Open();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1);
int secondsSinceEpoch = (int)t.TotalSeconds;
SqlCommand myCommand = new SqlCommand("INSERT INTO dbo.Table_1 (test1, test2) " +
"Values ('testing', " + secondsSinceEpoch + ")", myConnection);
myCommand.ExecuteNonQuery();
try
{
SqlDataReader myReader = null;
myCommand = new SqlCommand("select * from dbo.Table_1",
myConnection);
myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
Console.WriteLine(myReader["test1"].ToString());
Console.WriteLine(myReader["test2"].ToString());
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
答案 0 :(得分:2)
我发现问题是EC2 SQL Server实例没有正确的入站规则!上面的代码是有用的。仅作为示例,请参阅下面的相应project.json:
{
"version": "1.0.0-*",
"dependencies": {},
"buildOptions": {
"warningsAsErrors": true,
"emitEntryPoint": true
},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.1"
},
"System.Data.SqlClient": {
"version": "4.1.0-*"
}
},
"imports": "dnxcore50"
}
}
}