刑迁 2015-07-26 15:38 采纳率: 0%
浏览 1608

DataSet自动生成updatacommand更新数据库出错的问题

我已经设置了主键了,而且是自增的保证唯一,程序里面也再次设置了一次如:
DataColumn[] dcs = { dt.Columns["ID"] };
dt.PrimaryKey = dcs;

            但是,TM就是出错啊出错,那个“  对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。”错误不散就是不散,我不想去写SQL那句了,不是懒,就是拼凑的方法真心太low了,还要考虑那么多IF,不如Dataset那句dt.updata();来得直接啊



        完整代码在这里,sqlparameter可以参数化,但是如果每次修改的列不同怎么办,这次修改了姓名,下次可能只修改身份证号,还是拼接啊

string SQL_Refresh = "select * from 报名表 where ID='"+ ID.ToString()+"'";
SqlCommand cmd = new SqlCommand(SQL_Refresh, cnn);
DataSet Data_all = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
SqlCommandBuilder scb = new SqlCommandBuilder(adp);
adp.Fill(Data_all, "报名表");

        DataTable dt = Data_all.Tables["报名表"];
        //foreach (DataRow row in dt.Rows)
        //{
        //    string a= row["ID"].ToString();
        //    string b= row["姓名"].ToString();
        //    string c= row["证件号码"].ToString();
        //   string d=row["民族"].ToString();

        //}

        if (Data_all == null)
        {
            return;
        }

        //DataColumn[] dcs = { dt.Columns["ID"] };
        //dt.PrimaryKey = dcs;
        //DataRow dr = dt.Rows.Find(ID.ToString());
        DataColumn[] dcs = { dt.Columns["ID"] };
        dt.PrimaryKey = dcs;
        DataRow[] drs = dt.Select("ID=" +ID.ToString());
        DataRow dr = drs[0];

        dr.BeginEdit();
        if (StudentName.Text != _StudentName)
        {
            dr["姓名"] = StudentName.Text;
            for (int i = 0; i < 4; i++)
            {
                if (File.Exists(path_Pre + S[i] + ".tif"))
                {
                    Computer MyComputer = new Computer();
                    MyComputer.FileSystem.RenameFile(path_Pre + S[i] + ".tif", path_Real + S[i] + ".tif");
                }
            }
        }



        dr["性别"] = Sex.Text;
        dr["出生日期"] = BornDate.Text;
        dr["户籍性质"] = Citizenkind.Text;
        dr["民族"] = Nation.Text;
        dr["毕业学校"] = School.Text;

        if (DetailSite.Text != "")
        {
            dr["行政区划代码"] = SiteCode;
            dr["联系地址"] = FullSite.Substring(Province.Text.Length + Shiji.Text.Length);
            dr["完全详细地址"] = FullSite;
            dr["证件号码"] = Identify.Text;
            dr["省级名称"] = Province.Text;
            dr["地州级名称"] = Shiji.Text;
            dr["县级名称"] = Town.Text;
        }
        dr["家长电话"] = ParentsPhone.Text;
        if (Selfphone.Text != "")
        {
            dr["学生电话"] = Selfphone.Text;
        }
        dr["家长姓名"] = Parents.Text;
        dr["所报专业代码"] = Major.Text;
        //dr["报名时间"] = dateTimePicker1.Text;
        dr["书费"] = Bookcost.Text;
        dr["生活费"] = livecost.Text;

        if (File.Exists(paths_fore + paths_or + "_sfz_A.tif"))
        {
            dr["有无身份证正面"] = "1";
        }
        else
        {
            dr["有无身份证正面"] = "0";
        }
        if (File.Exists(paths_fore + paths_or + "_sfz_B.tif"))
        {
            dr["有无身份证背面"] = "1";
        }
        else
        {
            dr["有无身份证背面"] = "0";
        }

        if (File.Exists(paths_fore + paths_or + "_hk_A.tif"))
        {
            dr["有无户口首页"] = "1";
        }
        else
        {
            dr["有无户口首页"] = "0";
        }
        if (File.Exists(paths_fore + paths_or + "_hk_B.tif"))
        {
            dr["有无户口本人页"] = "1";
        }
        else
        {
            dr["有无户口本人页"] = "0";
        }
        if (File.Exists(paths_fore + paths_or + "_pkzm.tif"))
        {
            dr["有无贫困证明"] = "1";
        }
        else
        {
            dr["有无贫困证明"] = "0";
        }

       dr.EndEdit();
        try
        {
            adp.Update(Data_all, "报名表");
            Data_all.Clear();
        }
        catch (SqlException exp)
        {
            MessageBox.Show(exp.Message.ToString());
        }
  • 写回答

1条回答 默认 最新

  • threenewbee 2015-07-26 16:06
    关注

    要看完整的代码,另外,你可以用参数化sql
    sqlparameter,不需要拼接。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格