SqlSugar 连接数据库、创建数据表、增删改查用法
using SqlSugar;
public class DB : Singleton<DB>
{
public static SqlSugarClient mDB;
public void InitDB()
{
//建立数据库链接
mDB = new SqlSugarClient(new ConnectionConfig()
{
//Server:表示数据库地址 uid:表示数据库管理员id pwd:表示数据库管理员密码 database:表示连接数据库的库名(如果没有可以自定义,调用 mDB.DbMaintenance.CreateDatabase()会生成)
ConnectionString = "server=127.0.0.1;uid=root;pwd=zhumengxy;database=fish",
DbType = DbType.MySql,//设置数据库类型
IsAutoCloseConnection = true,//自动释放数据务,如果存在事务,在事务结束后释放
InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
});
//用来打印Sql方便你调试
mDB.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql + "\r\n" +
mDB.Utilities.SerializeObject(pars.ToString()));
Console.WriteLine();
};
//创建数据库 如果该库不存在,则进行创建。(这里创建的是名字为 fish 数据库)
mDB.DbMaintenance.CreateDatabase();
//初始化数据表,如果没有则创建
mDB.CodeFirst.InitTables(typeof(UserDataTabel));
}
}
InitTables() 接口用来初始化我们的实体类映射的数据表。
类的变量名字就是数据表的字段名字。
下面是数据表对应的实体类:
public class UserDataTabel
{
//ID 自增 主键
[SugarColumn(IsIdentity = true, IsPrimaryKey = true)]
public int Id { get; set; }
//用户id
public long userid { get; set; }
//用户昵称
[SugarColumn(IsNullable = true)]
public string NickName { get; set; }
//签名
[SugarColumn(ColumnDataType = "Nvarchar(255)")]//自定格式的情况 length不要设置
public string signture { get; set; }
//注册时间
[SugarColumn(IsNullable = true)]
public DateTime RegisterTime { get; set; }
public override string ToString()
{
return $"NickName:{NickName} userid:{userid} Signture:{signture} RegisterTime:{RegisterTime}";
}
}
当我们执行过 InitDB() 接口后 打开 MySQL Workbench 数据库可视化软件后,可以看到我们的 fish 数据库以及userdatatabel数据表就被创建出来了。
当我们的数据库和数据表被创建出来后,我们就可以开始下一步了。
#region 数据插入
public void Insertable()
{
//在表的末尾插入一条数据 返回值是插入数据的个数
UserDataTabel userdata1 = new UserDataTabel() { userid = 4, NickName = "zm100", RegisterTime = DateTime.Now, signture = "数据插入测试1" };
int count = mDB.Insertable(userdata1).ExecuteCommand();
Console.WriteLine($"插入了 {count} 条数据");
//在表的末尾插入一条数据 返回值是插入成功的自增列
UserDataTabel userdata2 = new UserDataTabel() { userid = 6, NickName = "zm100", RegisterTime = DateTime.Now, signture = "数据插入测试1,返回自增列" };
int column = mDB.Insertable(userdata2).ExecuteReturnIdentity();
Console.WriteLine($"在数据库中插入了一条数据,自增列数值为:" + column);
//在表的末尾插入一条数据,返回值是插入成功的实体对象
UserDataTabel userData3 = new UserDataTabel() { userid = 5, NickName = "zm200", RegisterTime = DateTime.Now, signture = "返回对象数据插入测试" };
UserDataTabel userData = mDB.Insertable(userData3).ExecuteReturnEntity();
Console.WriteLine($"数据插入成功 插入对象 {userData.NickName} 行插入了一条数据");
}
/// <summary>
/// 插入表数据到指定的列
/// </summary>
public void InsertableDataToTargetColumns()
{
//在表的末尾只插入指定的列数据
UserDataTabel userData = new UserDataTabel() { userid = 66, NickName = "zm422", RegisterTime = DateTime.Now, signture = "指定列插入测试,返回自增列序号" };
//插入指定的 userid nickName signture 到数据表中
int column = mDB.Insertable(userData).InsertColumns(t => new { t.userid, t.NickName, t.signture }).ExecuteReturnIdentity();
Console.WriteLine($"在数据库中插入了一条数据,自增列数值为:" + column);
}
/// <summary>
/// 插入数据到表中,排除指定的列
/// </summary>
public void InsertableDataIgnoreTargetColumns()
{
//在表的末尾只插入指定的列数据
UserDataTabel userData = new UserDataTabel() { userid = 77, NickName = "zm77", RegisterTime = DateTime.Now, signture = "排除列插入测试,返回自增列序号" };
//插入指定的 userid nickName signture 到数据表中
int column = mDB.Insertable(userData).IgnoreColumns(t => new { t.NickName }).ExecuteReturnIdentity();
Console.WriteLine($"在数据库中插入了一条数据,自增列数值为:" + column);
}
/// <summary>
/// 插入数据到表中,根据条件排除对应的列
/// </summary>
public void InsertableDataIgnoreWhereTargetColumns()
{
//在表的末尾只插入指定的列数据
UserDataTabel userData = new UserDataTabel() { userid = 77, NickName = "zm88", RegisterTime = DateTime.Now, signture = "根据条件排除对应的列,返回自增列序号" };
//插入数据时排除NickName==zm88的列
int column = mDB.Insertable(userData).IgnoreColumns(t => t.NickName == "zm88").ExecuteReturnIdentity();
Console.WriteLine($"在数据库中插入了一条数据,自增列数值为:" + column);
}
/// <summary>
/// 插入列表数据到数据表中,性能很快
/// </summary>
public void InsertableDataList()
{
//在表的末尾只插入指定的列数据
List<UserDataTabel> dataList = new List<UserDataTabel>();
dataList.Add(new UserDataTabel() { userid = 90, NickName = "zm90", RegisterTime = DateTime.Now, signture = "列表数据插入90" });
dataList.Add(new UserDataTabel() { userid = 91, NickName = "zm91", RegisterTime = DateTime.Now, signture = "列表数据插入91" });
dataList.Add(new UserDataTabel() { userid = 92, NickName = "zm92", RegisterTime = DateTime.Now, signture = "列表数据插入92" });
//插入数据时排除NickName==zm88的列
int count = mDB.Insertable(dataList).ExecuteCommand();
Console.WriteLine($"在数据库中插入了个列表,插入成功的数据长度:" + count);
}
/// <summary>
/// 插入数据到表中,插入时上锁 (锁是保证在高并发修改数据时数据的完整性,保证在同一时间只能由一个Task去修改该数据
/// 从而避免同时间有多个Task去修改该数据导致数据的异常)
/// </summary>
public void InsertableDataWithUpLock()
{
//在表的末尾只插入指定的列数据
UserDataTabel userData = new UserDataTabel() { userid = 898, NickName = "zm898", RegisterTime = DateTime.Now, signture = "以上锁的方式插入数据,返回自增列序号" };
//插入数据时排除NickName==zm88的列
int column = mDB.Insertable(userData).With("SQLLock").ExecuteReturnIdentity();
Console.WriteLine($"在数据库中插入了一条数据,自增列数值为:" + column);
}
#endregion
#region 数据查询
/// <summary>
/// 查询表中的所有数据 常用于装备列表拉取
/// </summary>
public List<UserDataTabel> QueryDataList()
{
//查询表中的所有数据
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().ToList();
//打印表中数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
return userDataList;
}
/// <summary>
/// 根据指定的个数从表的第一行开始查询指定个数的数据
/// </summary>
public void QueryDataListByCount()
{
//查询表中指定的数据
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().Take(3).ToList();
//打印表中数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
}
/// <summary>
/// 根据主键查询指定的数据 常用语查询表中指定个数的数据
/// </summary>
public void QueryDataByPrimaryKey()
{
//根据指定的主键id查询表中指定的数据
UserDataTabel userdata = mDB.Queryable<UserDataTabel>().InSingle(10);
//打印数据
Console.WriteLine(userdata.ToString());
}
/// <summary>
/// 根据条件查询指定的数据 可用于查询用户的装备或道具信息
/// </summary>
public void QueryDataByWhere()
{
//根据指定的条件查询数据
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().Where(t => t.NickName == "zm91" || t.NickName == "ZM").ToList();
//打印数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
}
/// <summary>
/// 查询数据列表并进行排序 可用于排行榜数据查询
/// </summary>
public void QueryDataListAndSort()
{
//根据指定的条件查询数据 Asc表示升序,数值由小变大,最小的在前面,逐渐上升。Desc 表示降序,最大的在前面,逐渐下降
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().OrderBy(t => t.userid, OrderByType.Asc).ToList();
//打印数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
}
/// <summary>
/// 查询指定数据是否存在 可用账号注册或其他验证
/// </summary>
public void QueryDataIsExists()
{
//根据指定的条件查询数据 如果数据存在,返回True,数据不存在返回False
bool dataIsExists = mDB.Queryable<UserDataTabel>().Where(t => t.userid == 2334).Any();
//打印数据
Console.WriteLine("dataIsExists:" + dataIsExists);
}
/// <summary>
/// 通过匹配查询数据
/// </summary>
public void QueryDataByMatchs()
{
List<string> matchsList = new List<string> { "zm", "zm91" };
// 根据列表中数据去匹配查询表中的所有数据
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().Where(t => matchsList.Contains(t.NickName)).ToList();
//打印数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
}
/// <summary>
/// 通过SQLFunc查询数据
/// </summary>
public void QueryDataBySQLFunc()
{
//查询所有昵称中包含zm的数据
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().Where(t => SqlFunc.Contains(t.NickName, "zm")).ToList();
//打印数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
}
#endregion
#region 更新数据
/// <summary>
/// 单条数据更新
/// </summary>
public void UpdatetableData()
{
//通过查询获取名称为zm91的第一条数据
UserDataTabel userData = mDB.Queryable<UserDataTabel>().Where(t => t.NickName == "zm91").First();//First,返回序列中的第一条记录,如果没有记录,则引发异常
if (userData != null)
{
//修改数据并进行更新
userData.RegisterTime = DateTime.Now;
mDB.Updateable(userData).ExecuteCommand();
}
//FirstOrDefault, 返回序列中的第一条记录,如果序列中不包含任何记录,则返回默认值。
//Single,返回序列中的唯一一条记录,如果没有或返回多条,则引发异常。
//SingleOrDefault,返回序列中满足指定条件的唯一元素;如果这类元素不存在,则返回默认值;如果有多个元素满足该条件,此方法
}
/// <summary>
/// 列表数据更新
/// </summary>
public void UpdatetableDataList()
{
//查询数据库中的所有数据
List<UserDataTabel> userDatalist = QueryDataList();
foreach (var item in userDatalist)
{
item.RegisterTime = DateTime.Now;
}
//更新数据列表
mDB.Updateable(userDatalist).ExecuteCommand();
}
#endregion
#region 数据保存
/// <summary>
/// 保存数据 如果表中没有该数据,执行插入操作。否则执行更新操作。
/// </summary>
public void SavetableData()
{
UserDataTabel userData = new UserDataTabel();
userData.NickName = "新梦想起航!";
userData.userid = 999;
userData.signture = "迈巴赫Sss";
userData.RegisterTime = DateTime.Now;
//Storageable表示把当前对象存储为新数据
mDB.Storageable(userData).ExecuteCommand();
userData.signture = "迈巴赫Sss680";
mDB.Updateable(userData).ExecuteCommand();
}
#endregion
#region 删除数据
/// <summary>
/// 根据实体对象删除数据
/// </summary>
public void DeletetableDataByEntity()
{
UserDataTabel userData = new UserDataTabel();
userData.NickName = "新梦想起航!";
userData.userid = 999;
userData.signture = "宾利";
userData.RegisterTime = DateTime.Now;
//删除数据
int count = mDB.Deleteable(userData).ExecuteCommand();
Console.WriteLine("删除成功的个数:" + count);
}
/// <summary>
/// 根据条件删除数据
/// </summary>
public void DeletetableDataByWhere()
{
UserDataTabel userData = new UserDataTabel();
userData.NickName = "新梦想起航!";
userData.userid = 999;
userData.signture = "宾利";
userData.RegisterTime = DateTime.Now;
//插入一条数据
mDB.Insertable(userData).ExecuteCommand();
//删除所有签名为宾利的所有数据 如果没有这个数据,返回值为0
int deleteCount = mDB.Deleteable<UserDataTabel>().Where(t => t.signture == "宾利").ExecuteCommand();
Console.WriteLine("删除成功的个数:" + deleteCount);
}
#endregion
public class UserDataTabel
{
//ID 自增 主键
[SugarColumn(IsIdentity = true, IsPrimaryKey = true)]
public int Id { get; set; }
//用户id
public long userid { get; set; }
//用户昵称
[SugarColumn(IsNullable = true)]
public string NickName { get; set; }
//签名
[SugarColumn(ColumnDataType = "Nvarchar(255)")]//自定格式的情况 length不要设置
public string signture { get; set; }
//注册时间
[SugarColumn(IsNullable = true)]
public DateTime RegisterTime { get; set; }
public override string ToString()
{
return $"NickName:{NickName} userid:{userid} Signture:{signture} RegisterTime:{RegisterTime}";
}
}
public class DB : Singleton<DB>
{
public static SqlSugarClient mDB;
public void InitDB()
{
//建立数据库链接
mDB = new SqlSugarClient(new ConnectionConfig()
{
//Server:表示数据库地址 uid:表示数据库管理员id pwd:表示数据库管理员密码 database:表示连接数据库的库名(如果没有可以自定义,调用 mDB.DbMaintenance.CreateDatabase()会生成)
ConnectionString = "server=127.0.0.1;uid=root;pwd=zhumengxy;database=fish",
DbType = DbType.MySql,//设置数据库类型
IsAutoCloseConnection = true,//自动释放数据务,如果存在事务,在事务结束后释放
InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
});
//用来打印Sql方便你调试
mDB.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql + "\r\n" +
mDB.Utilities.SerializeObject(pars.ToString()));
Console.WriteLine();
};
//创建数据库库
mDB.DbMaintenance.CreateDatabase();
//初始化数据表,如果没有则创建
mDB.CodeFirst.InitTables(typeof(UserDataTabel));
//mDB.CodeFirst.InitTables(typeof(UserInfoDB));
//插入数据
Insertable();
//InsertableDataToTargetColumns();
//InsertableDataExcludeTargetColumns();
//InsertableDataIgnoreWhereTargetColumns();
//InsertableDataList();
//InsertableDataWithUpLock();
//数据查询
//QueryDataList();
//QueryDataListByCount();
//QueryDataByPrimaryKey();
//QueryDataByWhere();
//QueryDataListAndSort();
//QueryDataIsExists();
//QueryDataBySQLFunc();
//QueryDataByMatchs();
//更新数据
//UpdatetableDataList();
//UpdatetableData();
//SavetableData();
//删除数据
//DeletetableDataByEntity();
//DeletetableDataByWhere();
}
#region 数据插入
public void Insertable()
{
//在表的末尾插入一条数据 返回值是插入数据的个数
UserDataTabel userdata1 = new UserDataTabel() { userid = 4, NickName = "zm100", RegisterTime = DateTime.Now, signture = "数据插入测试1" };
int count = mDB.Insertable(userdata1).ExecuteCommand();
Console.WriteLine($"插入了 {count} 条数据");
//在表的末尾插入一条数据 返回值是插入成功的自增列
UserDataTabel userdata2 = new UserDataTabel() { userid = 6, NickName = "zm100", RegisterTime = DateTime.Now, signture = "数据插入测试1,返回自增列" };
int column = mDB.Insertable(userdata2).ExecuteReturnIdentity();
Console.WriteLine($"在数据库中插入了一条数据,自增列数值为:" + column);
//在表的末尾插入一条数据,返回值是插入成功的实体对象
UserDataTabel userData3 = new UserDataTabel() { userid = 5, NickName = "zm200", RegisterTime = DateTime.Now, signture = "返回对象数据插入测试" };
UserDataTabel userData = mDB.Insertable(userData3).ExecuteReturnEntity();
Console.WriteLine($"数据插入成功 插入对象 {userData.NickName} 行插入了一条数据");
}
/// <summary>
/// 插入表数据到指定的列
/// </summary>
public void InsertableDataToTargetColumns()
{
//在表的末尾只插入指定的列数据
UserDataTabel userData = new UserDataTabel() { userid = 66, NickName = "zm422", RegisterTime = DateTime.Now, signture = "指定列插入测试,返回自增列序号" };
//插入指定的 userid nickName signture 到数据表中
int column = mDB.Insertable(userData).InsertColumns(t => new { t.userid, t.NickName, t.signture }).ExecuteReturnIdentity();
Console.WriteLine($"在数据库中插入了一条数据,自增列数值为:" + column);
}
/// <summary>
/// 插入数据到表中,排除指定的列
/// </summary>
public void InsertableDataIgnoreTargetColumns()
{
//在表的末尾只插入指定的列数据
UserDataTabel userData = new UserDataTabel() { userid = 77, NickName = "zm77", RegisterTime = DateTime.Now, signture = "排除列插入测试,返回自增列序号" };
//插入指定的 userid nickName signture 到数据表中
int column = mDB.Insertable(userData).IgnoreColumns(t => new { t.NickName }).ExecuteReturnIdentity();
Console.WriteLine($"在数据库中插入了一条数据,自增列数值为:" + column);
}
/// <summary>
/// 插入数据到表中,根据条件排除对应的列
/// </summary>
public void InsertableDataIgnoreWhereTargetColumns()
{
//在表的末尾只插入指定的列数据
UserDataTabel userData = new UserDataTabel() { userid = 77, NickName = "zm88", RegisterTime = DateTime.Now, signture = "根据条件排除对应的列,返回自增列序号" };
//插入数据时排除NickName==zm88的列
int column = mDB.Insertable(userData).IgnoreColumns(t => t.NickName == "zm88").ExecuteReturnIdentity();
Console.WriteLine($"在数据库中插入了一条数据,自增列数值为:" + column);
}
/// <summary>
/// 插入列表数据到数据表中,性能很快
/// </summary>
public void InsertableDataList()
{
//在表的末尾只插入指定的列数据
List<UserDataTabel> dataList = new List<UserDataTabel>();
dataList.Add(new UserDataTabel() { userid = 90, NickName = "zm90", RegisterTime = DateTime.Now, signture = "列表数据插入90" });
dataList.Add(new UserDataTabel() { userid = 91, NickName = "zm91", RegisterTime = DateTime.Now, signture = "列表数据插入91" });
dataList.Add(new UserDataTabel() { userid = 92, NickName = "zm92", RegisterTime = DateTime.Now, signture = "列表数据插入92" });
//插入数据时排除NickName==zm88的列
int count = mDB.Insertable(dataList).ExecuteCommand();
Console.WriteLine($"在数据库中插入了个列表,插入成功的数据长度:" + count);
}
/// <summary>
/// 插入数据到表中,插入时上锁 (锁是保证在高并发修改数据时数据的完整性,保证在同一时间只能由一个Task去修改该数据
/// 从而避免同时间有多个Task去修改该数据导致数据的异常)
/// </summary>
public void InsertableDataWithUpLock()
{
//在表的末尾只插入指定的列数据
UserDataTabel userData = new UserDataTabel() { userid = 898, NickName = "zm898", RegisterTime = DateTime.Now, signture = "以上锁的方式插入数据,返回自增列序号" };
//插入数据时排除NickName==zm88的列
int column = mDB.Insertable(userData).With("SQLLock").ExecuteReturnIdentity();
Console.WriteLine($"在数据库中插入了一条数据,自增列数值为:" + column);
}
#endregion
#region 数据查询
/// <summary>
/// 查询表中的所有数据 常用于装备列表拉取
/// </summary>
public List<UserDataTabel> QueryDataList()
{
//查询表中的所有数据
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().ToList();
//打印表中数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
return userDataList;
}
/// <summary>
/// 根据指定的个数从表的第一行开始查询指定个数的数据
/// </summary>
public void QueryDataListByCount()
{
//查询表中指定的数据
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().Take(3).ToList();
//打印表中数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
}
/// <summary>
/// 根据主键查询指定的数据 常用语查询表中指定个数的数据
/// </summary>
public void QueryDataByPrimaryKey()
{
//根据指定的主键id查询表中指定的数据
UserDataTabel userdata = mDB.Queryable<UserDataTabel>().InSingle(10);
//打印数据
Console.WriteLine(userdata.ToString());
}
/// <summary>
/// 根据条件查询指定的数据 可用于查询用户的装备或道具信息
/// </summary>
public void QueryDataByWhere()
{
//根据指定的条件查询数据
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().Where(t => t.NickName == "zm91" || t.NickName == "ZM").ToList();
//打印数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
}
/// <summary>
/// 查询数据列表并进行排序 可用于排行榜数据查询
/// </summary>
public void QueryDataListAndSort()
{
//根据指定的条件查询数据 Asc表示升序,数值由小变大,最小的在前面,逐渐上升。Desc 表示降序,最大的在前面,逐渐下降
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().OrderBy(t => t.userid, OrderByType.Asc).ToList();
//打印数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
}
/// <summary>
/// 查询指定数据是否存在 可用账号注册或其他验证
/// </summary>
public void QueryDataIsExists()
{
//根据指定的条件查询数据 如果数据存在,返回True,数据不存在返回False
bool dataIsExists = mDB.Queryable<UserDataTabel>().Where(t => t.userid == 2334).Any();
//打印数据
Console.WriteLine("dataIsExists:" + dataIsExists);
}
/// <summary>
/// 通过匹配查询数据
/// </summary>
public void QueryDataByMatchs()
{
List<string> matchsList = new List<string> { "zm", "zm91" };
// 根据列表中数据去匹配查询表中的所有数据
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().Where(t => matchsList.Contains(t.NickName)).ToList();
//打印数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
}
/// <summary>
/// 通过SQLFunc查询数据
/// </summary>
public void QueryDataBySQLFunc()
{
//查询所有昵称中包含zm的数据
List<UserDataTabel> userDataList = mDB.Queryable<UserDataTabel>().Where(t => SqlFunc.Contains(t.NickName, "zm")).ToList();
//打印数据
foreach (var item in userDataList)
{
Console.WriteLine(item.ToString());
}
}
#endregion
#region 更新数据
/// <summary>
/// 单条数据更新
/// </summary>
public void UpdatetableData()
{
//通过查询获取名称为zm91的第一条数据
UserDataTabel userData = mDB.Queryable<UserDataTabel>().Where(t => t.NickName == "zm91").First();//First,返回序列中的第一条记录,如果没有记录,则引发异常
if (userData != null)
{
//修改数据并进行更新
userData.RegisterTime = DateTime.Now;
mDB.Updateable(userData).ExecuteCommand();
}
//FirstOrDefault, 返回序列中的第一条记录,如果序列中不包含任何记录,则返回默认值。
//Single,返回序列中的唯一一条记录,如果没有或返回多条,则引发异常。
//SingleOrDefault,返回序列中满足指定条件的唯一元素;如果这类元素不存在,则返回默认值;如果有多个元素满足该条件,此方法
}
/// <summary>
/// 列表数据更新
/// </summary>
public void UpdatetableDataList()
{
//查询数据库中的所有数据
List<UserDataTabel> userDatalist = QueryDataList();
foreach (var item in userDatalist)
{
item.RegisterTime = DateTime.Now;
}
//更新数据列表
mDB.Updateable(userDatalist).ExecuteCommand();
}
#endregion
#region 数据保存
/// <summary>
/// 保存数据 如果表中没有该数据,执行插入操作。否则执行更新操作。
/// </summary>
public void SavetableData()
{
UserDataTabel userData = new UserDataTabel();
userData.NickName = "新梦想起航!";
userData.userid = 999;
userData.signture = "迈巴赫Sss";
userData.RegisterTime = DateTime.Now;
//Storageable表示把当前对象存储为新数据
mDB.Storageable(userData).ExecuteCommand();
userData.signture = "迈巴赫Sss680";
mDB.Updateable(userData).ExecuteCommand();
}
#endregion
#region 删除数据
/// <summary>
/// 根据实体对象删除数据
/// </summary>
public void DeletetableDataByEntity()
{
UserDataTabel userData = new UserDataTabel();
userData.NickName = "新梦想起航!";
userData.userid = 999;
userData.signture = "宾利";
userData.RegisterTime = DateTime.Now;
//删除数据
int count = mDB.Deleteable(userData).ExecuteCommand();
Console.WriteLine("删除成功的个数:" + count);
}
/// <summary>
/// 根据条件删除数据
/// </summary>
public void DeletetableDataByWhere()
{
UserDataTabel userData = new UserDataTabel();
userData.NickName = "新梦想起航!";
userData.userid = 999;
userData.signture = "宾利";
userData.RegisterTime = DateTime.Now;
//插入一条数据
mDB.Insertable(userData).ExecuteCommand();
//删除所有签名为宾利的所有数据 如果没有这个数据,返回值为0
int deleteCount = mDB.Deleteable<UserDataTabel>().Where(t => t.signture == "宾利").ExecuteCommand();
Console.WriteLine("删除成功的个数:" + deleteCount);
}
#endregion
}
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t