这里我使用我的webmethod.But当我要连接它时显示这个错误。但我认为我的代码很好。
ExecuteReader需要一个开放且可用的连接。连接的当前状态是连接。
mycode的
public static List<CommonPages> GetCommonPagesDescription(int Type)
{
List<CommonPages> CommonPageDescription = new List<CommonPages>();
try
{
SqlCommand comGetAllFiles = new SqlCommand("GetCommonPageDescriptions", conDB);
comGetAllFiles.CommandType = CommandType.StoredProcedure;
if (conDB.State == ConnectionState.Closed)
conDB.Open(); // <-- Debugger Skip this & goto next line
comGetAllFiles.Parameters.Add("@Type", SqlDbType.Int);
comGetAllFiles.Parameters["@Type"].Value = Type;
SqlDataReader rdr = comGetAllFiles.ExecuteReader();//<-- error generating here
DataTable dt = new DataTable();
dt.Load(rdr);
foreach (DataRow r in dt.Rows)
{
CommonPageDescription.Add(new CommonPages
{
Id = (int)r["Id"],
Description = r["Description"].ToString(),
Type = (int)r["Type"],
UpdatedDate = (DateTime)r["UpdatedDate"],
UpdatedBy = (Guid)r["UpdatedBy"]
});
}
}
catch (Exception ee)
{
}
finally
{
conDB.Close();
}
return CommonPageDescription;
}
conDB在这里初始化
static SqlConnection conDB = new SqlConnection(ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString);
答案 0 :(得分:1)
conDB
必须是共享连接吗?可能不是一个好主意,利用连接池。
要解决此问题,请考虑按请求打开和关闭connection
。如果伏都教说这种效率低,实际上你想尽可能少地打开/关闭连接,但有时你需要因为一个原因而去数据库,请不要在乎。您可以使用context
模式更好地共享连接。但要解决您的问题,您的数据库会以这种方式调用。
try
{
using( System.Data.Common.DbConnection conn = CreateConnection() )
{
//create your command...
//create your reader/or execute your command...
}
}
答案 1 :(得分:0)
不要在关闭时打开连接,而是在未打开时尝试打开连接。
public static List<CommonPages> GetCommonPagesDescription(int Type)
{
List<CommonPages> CommonPageDescription = new List<CommonPages>();
try
{
SqlCommand comGetAllFiles = new SqlCommand("GetCommonPageDescriptions", conDB);
comGetAllFiles.CommandType = CommandType.StoredProcedure;
if (conDB.State != ConnectionState.Open)
conDB.Open(); // <-- Debugger Skip this & goto next line
comGetAllFiles.Parameters.Add("@Type", SqlDbType.Int);
comGetAllFiles.Parameters["@Type"].Value = Type;
SqlDataReader rdr = comGetAllFiles.ExecuteReader();//<-- error generating here
DataTable dt = new DataTable();
dt.Load(rdr);
foreach (DataRow r in dt.Rows)
{
CommonPageDescription.Add(new CommonPages
{
Id = (int)r["Id"],
Description = r["Description"].ToString(),
Type = (int)r["Type"],
UpdatedDate = (DateTime)r["UpdatedDate"],
UpdatedBy = (Guid)r["UpdatedBy"]
});
}
}
catch (Exception ee)
{
}
finally
{
conDB.Close();
}
return CommonPageDescription;
}