protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<Employee> list = new List<Employee>();
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString.ToString()))
{
SqlDataAdapter da = new SqlDataAdapter("select UserID,UseName from Employee", conn);
da.Fill(dt);
}
foreach (DataRow dr in dt.Rows)
{
Employee employee = new Employee() { UserID = dr["UserID"].ToString(), UserName = dr["UserName"].ToString() };
list.Add(employee);
}
ViewState["Employee"] = list;
Repeater1.DataSource = (List<Employee>)ViewState["Employee"];
Repeater1.DataBind();
}
}
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
List<Employee> list = (List<Employee>)ViewState["Employee"];
string useid = e.CommandArgument.ToString();
Employee employee = e.Item.DataItem as Employee;
switch (e.CommandName)
{
//在内存中更新对象
case "Update":
break;
case "Delete":
//删除list中的一个对象
break;
case "Add":
foreach (Employee item in list)
{ //新增一个对象到list
list.Add(newemployee);
}
break;
}
ViewState["Employee"] = list;
}
/// <summary>
/// 只有在这里才对数据库操作
/// </summary>
protected void btn_Submit_Click(object sender, EventArgs e)
{
List<Employee> list = (List<Employee>)ViewState["Employee"];
foreach (Employee item in list)
{
//在数据库中员工进行修改或增加
//ExecuteNonQuery(item)
}
}
我的思想是:如果有一组对象(比如十个),它有新增,删除,修改这三种标记,在统一提交表单时(即统一提交到数据库时),然后通过这三个标记对数据库进行增删除操作。这就是我问题的核心,求高手!!!你也可以告诉怎么写这个类,或它继承哪个类或接口,能实现这种功能,真心求教!
因为我做的是公司内部用的系统,所以性能优先,所以在当前的这个操作我不会用jquery或者ext去实现一条一条的更新。虽然我现在说的这个思想和linq在某点很相似。但我用的是ADO,linq处理大数据不行。
还有一个要求是:一定是对对象进行操作,所以同样我也不会用DataTable中的
DataTable dt = new DataTable();
dt.Rows[0].RowState;
dt.Rows[0].BeginEdit();
dt.Rows[0].CancelEdit();
dt.AcceptChanges();
求高手指点一二
因为数据量大得难以想像,Linq对处理大批量数据肯定不是很好。
那个sqldataadapter归根到底还是用的datatable.rows[0].rowstate,它只是分批提交到数据,是提高的性能,但我操作的是对象,我在问题补充中已经说过了。通过各方面的平衡,我选择我想要的这种思路,所以希望高手你在对象和类方面作思考,如果确实能有好的建议,我再加二百分。
你可能要自己写一个数据执行的类了,应该实现DbDataAdapter。至于思路你上边的追问中提到。要继承OperateState。每个对象都有一个标志位来确定是那种操作。
同事要创建每种操作的执行命令。也就是Sql文。
有一个ADO.NET Entity Framework你可以看看
public class OperateState
{
public bool IsExist { get; set; }
public bool IsNew { get; set; }
public bool IsChanged { get; set; }
public bool IsDeleted { get; set; }
}
这个我既然想到了,我就不会拿出来问。有没有更好的办法
你仔细看看那个图,每条记录有更新和删除的操作,只不过是在内存中操作,Repeater中的按钮都只在内存中进行增删改,当点击提交的时候才写入数据库。 因为在内存中操作的时候我就给每一条作了判断,不会有错的。主要是看高手你能不能帮我实现这样:统一提交表单时(即统一提交到数据库时),然后通过这三个标记对数据库进行增删除操作。
追答哦!那你怎么保证工号是唯一的呢?还是工号可以重复。要是在内存中验证这些工号是唯一的,数据少时没问题,数据大了以后这样操作不如直接对数据库。这是我的片面理解
追问工号是GUID,这只是例子而已,主要是想问这个思路。比如:
这个类继承于这个类:
public class OperateState
{
public bool IsExist { get; set; }
public bool IsNew { get; set; }
public bool IsChanged { get; set; }
public bool IsDeleted { get; set; }
}
但这不是我所期望的
[真诚求助].NET C# 对象与SQL交互问题(有图有真像)
你仔细看看那个图,每条记录有更新和删除的操作,只不过是在内存中操作,Repeater中的按钮都只在内存中进行增删改,当点击提交的时候才写入数据库。 因为在内存中操作的时候我就给每一条作了判断,不会有错的。主要是看高手你能不能帮我实现这样:统一提交表单时(即统一提交到数据库时),然后通过这三...
推荐本学习ASP的教材
ASP.NET 基础教程-C#案例版 ASP.NET Unleashed ASP与SQL网页数据库程序设计 ASP.Net 1.0入门经典C#篇 ASP.NET高级开发技术与范例 ASP.NET 高级编程中文扫描版 10天学会ASP.NET教程 ASP漏洞分析和解决方法 国内内容最全的一套ASP教程 ASP.Net动态网站编程指南 ASP.NET XML深入编程技术 asp内置6大对...