在我的ASP.Net MVC Web-API中,我从SQL Server获取数据。当我从Visual Studio中运行该连接时,该连接正常工作并始终返回正确的数据,但是当我将相同的WebSite添加到IIS并从那里运行它时,有时它仍然可以工作,但是在大多数情况下,甚至从一开始它就说:连接未关闭,连接当前状态为“打开”。我认为IIS引起了问题。
我尝试过的方法: 删除并重新安装IIS。 从其他池运行应用程序 将连接字符串更改为“ integrated Security = true”,但随后显示
“用户'IIS APPPOOL \ DefaultAppPool'登录失败”。
注意:
SQL Server 2014 IIS = 10.0 Windows 10
这是代码。
public class DAL
{
static string connectionString = WebConfigurationManager.ConnectionStrings["SubsInfoConnectionString"].ConnectionString;
static SqlConnection sqlConn = new SqlConnection(connectionString);
public static AppSubscriber isAuthorized(string ICCID)
{
AppSubscriber appSubscriber = new AppSubscriber();
int[] result = new int[]{0, 0};
SqlCommand sqlCommand = new SqlCommand("spIsAuthorized4AndroidApp", sqlConn);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.AddWithValue("@ICCID", ICCID);
try
{
sqlConn.Open();
SqlDataReader dataReader = sqlCommand.ExecuteReader();
if (dataReader.Read())
{
appSubscriber.fullName = dataReader.GetString(0);
appSubscriber.mNumber = dataReader.GetString(1);
appSubscriber.ICCID = dataReader.GetString(2);
appSubscriber.active = dataReader.GetBoolean(3);
appSubscriber.expiryDate = dataReader.GetDateTime(4).Date.ToString("dd/MMM/yyy");
appSubscriber.remainingDays = dataReader.GetInt32(5);
}
}
catch (Exception e)
{
appSubscriber.fullName = e.Message;
}
finally
{
sqlConn.Close();
}
return appSubscriber;
}
这是连接字符串
connectionString="data source=Haroon-PC;integrated security=false;Initial Catalog=myDatabase; User ID = user; Password = password; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient"
答案 0 :(得分:0)
线程问题。您有两个请求同时运行相同的代码。您的第二个线程已执行“ sqlConn.Open();”。在“ sqlConn.Close();”之前从第一个开始。结果,您正在尝试打开已经打开的内容。
因此您可以 1)确保一次仅一个线程运行代码(确保在下一个线程打开之前关闭连接) 2)遵循最佳做法:
using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // Do work here; connection closed on following line. }