日期:2014-05-18  浏览次数:20923 次

C# 用SqlDataAdapter的Update更新数据库问题
C# code


            string strCmd = "SELECT  Top 0 * FROM tabAreaStationData";// 查询0个数据 只需要表的架构不需要数据
            SqlDataAdapter sqlAdapter = new SqlDataAdapter(strCmd, sqlCn);
           
            DataTable dt = new DataTable();  //创建一个表对象
            sqlAdapter.FillSchema(dt,SchemaType.Mapped);// 填充表的架构

            
            //这部分表dt填充数据


            SqlCommandBuilder baseInsertCommand = new SqlCommandBuilder(sqlAdapter);
            sqlAdapter.Update(dt);把dt表更新到数据库
         


例如在数据中的表定义了一个X字段,做为唯一键
因为dt表X字段中存在与数据库中表X字段值相同
所以提示错误
违反了 UNIQUE KEY 约束 'UQ__tabAreaStationDa__5535A963'。不能在对象 'dbo.tabAreaStationData' 中插入重复键。

如果dt表X字段与数据库中表X字段值相同
直接覆盖掉数据库这一行的值
请问如何实现



------解决方案--------------------
这里给出一个验证的示例:
C# code

private void sqlDt_ColumnChanging(object sender, DataColumnChangeEventArgs eCol)
{
    switch (eCol.Column.ColumnName) {
        case "学号":
            if (Information.IsNumeric(eCol.ProposedValue.Trim) == false) {
                //通过SetColumnError设定字段的错误信息
                eCol.Row.SetColumnError("学号", "学号必须为数字!");
            }
            else {
                if (eCol.ProposedValue.Trim.Length != 12) {
                    eCol.Row.SetColumnError("学号", "学号只能是12个数字字符");
                }
                else {
                    //将字段的错误信息重设成空字符串(清除错误信息)
                    eCol.Row.SetColumnError("学号", "");
                }
            }

            break;
        case "姓名":
            if (eCol.ProposedValue.Trim.Length == 0) {
                eCol.Row.SetColumnError("姓名", "姓名不能为空!");
            }
            else {
                eCol.Row.SetColumnError("姓名", "");
            }

            break;
        case "性别":
            if (eCol.ProposedValue.Trim.Length == 0) {
                eCol.Row.SetColumnError("性别", "性别不能为空!");
            }
            else {
                if (eCol.ProposedValue.Trim != "男" & eCol.ProposedValue.Trim != "女") {
                    eCol.Row.SetColumnError("性别", "性别只能为男或女!");
                }
                else {
                    eCol.Row.SetColumnError("性别", "");
                }
            }

            break;
        case "班级编号":