【发布时间】:2017-02-06 21:15:37
【问题描述】:
我的代码中有一个错误列为:“DatabaseLayer”:在 using 语句中使用的类型必须隐式转换为“System.IDispsable”。
我尝试查看 MSDN 和其他 Stack Overflow 问题,但我没有解决该错误。我正在使用带有 .NET Framework 4.5.1 的 Visual Studio 2015。
错误在第 56 行,但我已在错误行上方注释。以下是我文件中的代码:
public class UserDataAccessLayer : IDisposable
{
public bool Create(string username, string pwd, string email)
{
bool retVal = false;
SqlCommand sqlCmd = new SqlCommand("CreateUser");
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@Username", username);
sqlCmd.Parameters.AddWithValue("@Pwd", pwd);
sqlCmd.Parameters.AddWithValue("@Email", email);
int result = new DatabaseLayer().ExecuteNonQuery(sqlCmd);
if (result != Int32.MaxValue)
retVal = true;
return retVal;
}
public bool Create(string username, string pwd, string email, int roleId)
{
bool retVal = false;
SqlCommand sqlCmd = new SqlCommand("CreateUser");
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@Username", username);
sqlCmd.Parameters.AddWithValue("@Pwd", pwd);
sqlCmd.Parameters.AddWithValue("@Email", email);
int result = new DatabaseLayer().ExecuteNonQuery(sqlCmd);
if (result != Int32.MaxValue)
retVal = true;
return retVal;
}
public void Dispose()
{
throw new NotImplementedException();
}
public User GetUserInfo(string username, string pwd)
{
User user = null;
using (DatabaseLayer dbLayer = new DatabaseLayer())
{
SqlCommand sqlCmd = new SqlCommand("GetUserInfo");
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@Username", username);
sqlCmd.Parameters.AddWithValue("@Pwd", pwd);
user = dbLayer.GetEntityList<User>(sqlCmd).FirstOrDefault();
}
return user;
}
}
【问题讨论】:
-
DatabaseLayer 没有实现 IDisposable。所以不要在 using 语句中创建它。
-
虽然错误很清楚,但帖子中提供的代码不是 - 没有关于
DatabaseLayer类型的信息。请阅读minimal reproducible example 发布代码指南。 -
如stackoverflow.com/questions/21719567/… 中所述,如果您正在使用实体框架但尚未安装包,也会出现警告。
标签: c# stored-procedures