注册 登录
编程论坛 ASP.NET技术论坛

在表现层使用DetailView的插入数据的时候,输入字符串的格式不正确。

myjieli 发布于 2010-12-21 10:37, 1461 次点击
在表现层使用DetailView的插入数据的时候,输入字符串的格式不正确。
我的数据表名称:calMainRecords
数据表结构及其数据类型:
ID char(6) 不容许空
Equipment_Name varchar(50) 容许空
Use_Place_ID int 不容许空
Cal_Date datetime 不容许空
Due_Date datetime 不容许空
Cal_Cycle_ID int 不容许空
Vender varchar(50) 容许空
Brand varchar(50) 容许空
Model varchar(50) 容许空
Serial_NO varchar(50) 容许空
Accuracy varchar(50) 容许空
Class char(1) 不容许空
Project_ID int 不容许空
Process_ID int 不容许空
Status char(1) 不容许空
WI_NO char(12) 不容许空
Drawing_NO char(12) 容许空
Renter_ID int 容许空
Rent_Date datetime 容许空
Sign_ID int 不容许空
Remark varchar(255) 容许空
我的方法: public bool AddcalMainRecords(String equipment_Name, DateTime? cal_Date, DateTime? due_Date, String vender, String brand, String model, String serial_NO, String accuracy, String myclass, String status, String WI_NO, String drawing_NO, String remark, int id)
  {
  // 新建一个calMainRecordsRow实例
  cal.calMainRecordsDataTable mycals = new cal.calMainRecordsDataTable();
  cal.calMainRecordsRow mycal = mycals.NewcalMainRecordsRow();
  mycal.Equipment_Name = equipment_Name;
  if (equipment_Name == null) mycal.SetEquipment_NameNull(); else mycal.Equipment_Name = equipment_Name;
  if (vender == null) mycal.SetVenderNull(); else mycal.Vender = vender;
  if (brand == null) mycal.SetBrandNull(); else mycal.Brand = brand;
  if (model == null) mycal.SetModelNull(); else mycal.Model = model;
  if (serial_NO == null) mycal.SetSerial_NONull(); else mycal.Serial_NO = serial_NO;
  if (accuracy == null) mycal.SetAccuracyNull(); else mycal.Accuracy = accuracy;
  if (drawing_NO == null) mycal.SetDrawing_NONull(); else mycal.Drawing_NO = drawing_NO;
  //少了Renter_ID和Rent_Date
  if (remark == null) mycal.SetRemarkNull(); else mycal.Remark = remark;
  mycals.AddcalMainRecordsRow(mycal);
  int rowsAffected = Adapter.Update(mycals);
  // 如果刚好新增了一条记录,则返回true,否则返回false
  return rowsAffected == 1;
  }
13 回复
#2
筱晓绾2010-12-21 10:50
DateTime? cal_Date这上面的?是怎么回事...
 cal.calMainRecordsDataTable mycals = new cal.calMainRecordsDataTable();这句中的cal是什么对象???
#3
myjieli2010-12-21 11:00
cal是一个DataSet,我这里写的是三层:
DAL里面包含了DataSet,即是这里的cal
BLL里面写入方法,即是上面我写的AddcaMainRecords
表现岑用detailview或Gv显示出数据
上面已经可以正常运行那些显示分页什么的了,只是当我要在表现层插入数据的时候说输入字符串的格式不正确。
估计是我插入的类型和数据库的对不上,所以出现错误。
所以我把数据库也贴出来了,那位帮忙找下
#4
筱晓绾2010-12-21 11:17
既然你都知道了 是数据类型的问题 那应该可以找出来错误吧
#5
myjieli2010-12-21 11:22
问题就是我想知道,我数据库里面有:
Use_Place_ID int 不容许空
Cal_Cycle_ID int 不容许空
Project_ID int 不容许空
Process_ID int 不容许空
上面这些是在数据库里面的,而我方法里面却没有定义这些参数,是不是就是这里的问题,还有就是我方法里面的参数都是用同样的名称只是用小写的,数据库用大写的字母)
#6
myjieli2010-12-21 11:22
帮忙对应下,看哪里错误嘛,我就是找不出了,才来求救
#7
筱晓绾2010-12-21 11:26
cal.calMainRecordsDataTable mycals = new cal.calMainRecordsDataTable();
  cal.calMainRecordsRow mycal = mycals.NewcalMainRecordsRow();
  //mycal.Equipment_Name = equipment_Name;注释掉
  if (equipment_Name == null) mycal.SetEquipment_NameNull(); else mycal.Equipment_Name = equipment_Name;
  if (vender == null) mycal.SetVenderNull(); else mycal.Vender = vender;
  if (brand == null) mycal.SetBrandNull(); else mycal.Brand = brand;
  if (model == null) mycal.SetModelNull(); else mycal.Model = model;
  if (serial_NO == null) mycal.SetSerial_NONull(); else mycal.Serial_NO = serial_NO;
  if (accuracy == null) mycal.SetAccuracyNull(); else mycal.Accuracy = accuracy;
  if (drawing_NO == null) mycal.SetDrawing_NONull(); else mycal.Drawing_NO = drawing_NO;
  //少了Renter_ID和Rent_Date
  if (remark == null) mycal.SetRemarkNull(); else mycal.Remark = remark;
  mycals.AddcalMainRecordsRow(mycal);
  int rowsAffected = Adapter.Update(mycals);
  // 如果刚好新增了一条记录,则返回true,否则返回false
  return rowsAffected == 1;
#8
筱晓绾2010-12-21 11:29
其次数据库中定义不许为空的,在传参时也得作为参数传入.在数据库中不区分大小写..
#9
myjieli2010-12-21 12:39
老大,这个现在是我完整的方法的代码,可是还是提示一样的错误:
   
[(, true)]
    public bool AddcalMainRecords(String equipment_Name, int use_Place_ID,DateTime? cal_Date, DateTime? due_Date, int cal_Cycle_ID,String vender, String brand, String model, String serial_NO, String accuracy, String Class, int project_ID,int process_ID,String status, String wi_NO, String drawing_NO,int Renter_ID,DateTime Rent_Date,int Sign_ID, String remark, int id)
    {
        // 新建一个calMainRecordsRow实例
        cal.calMainRecordsDataTable mycals = new cal.calMainRecordsDataTable();
        cal.calMainRecordsRow mycal = mycals.NewcalMainRecordsRow();
        if (equipment_Name == null) mycal.SetEquipment_NameNull(); else mycal.Equipment_Name = equipment_Name;
        if (vender == null) mycal.SetVenderNull(); else mycal.Vender = vender;
        if (brand == null) mycal.SetBrandNull(); else mycal.Brand = brand;
        if (model == null) mycal.SetModelNull(); else mycal.Model = model;
        if (serial_NO == null) mycal.SetSerial_NONull(); else mycal.Serial_NO = serial_NO;
        if (accuracy == null) mycal.SetAccuracyNull(); else mycal.Accuracy = accuracy;
        if (drawing_NO == null) mycal.SetDrawing_NONull(); else mycal.Drawing_NO = drawing_NO;
        //少了Renter_ID和Rent_Date
        if (remark == null) mycal.SetRemarkNull(); else mycal.Remark = remark;
        mycals.AddcalMainRecordsRow(mycal);
        int rowsAffected = Adapter.Update(mycals);
        // 如果刚好新增了一条记录,则返回true,否则返回false
        return rowsAffected == 1;
    }
#10
筱晓绾2010-12-21 12:47
刚才不是讲了吗?数据库中不为空的字段,在传值时就不能为空.目前你写的代码段里面并没有将值传过去.你只是判断可以为空的值.那些不为空的应该都加上:如mycal.Use_Place_ID=Use_Place_ID;
mycal.Cal_Cycle_ID=Cal_Cycle_ID;
......
依次类推...
将不为空的值直接赋值...
建议: 当表中数据多个不为空时,传对象不要传字段...

[ 本帖最后由 筱晓绾 于 2010-12-21 12:55 编辑 ]
#11
myjieli2010-12-24 13:31
老大,我更改了一下大概是这样的:
 public bool AddcalMainRecords(string equipment_Name,int use_Place_ID, DateTime cal_Date, DateTime due_Date, string vender, string brand, string model, string serial_NO, string accuracy, string myclass, string status, string wI_NO, string drawing_NO, string remark)
    {
        // 新建一个calMainRecordsRow实例
        cal.calMainRecordsDataTable mycals = new cal.calMainRecordsDataTable();
        cal.calMainRecordsRow mycal = mycals.NewcalMainRecordsRow();
        if (equipment_Name == null) mycal.SetEquipment_NameNull(); else mycal.Equipment_Name = equipment_Name;
        mycal.use_Place_ID//正常这里是应该可以打入mycal.Use_Place_ID的,也就是在mycal后面打个.之后会出来Use_Place_ID给我选择的,但是这里没有出来,而我又在参数那里定义了的。
#12
myjieli2010-12-24 13:36
最新代码:
 public bool AddcalMainRecords(string equipment_Name, DateTime cal_Date, DateTime due_Date, string vender, string brand, string model, string serial_NO, string accuracy, string myclass, string status, string wI_NO, string drawing_NO, string remark)
    {
        // 新建一个calMainRecordsRow实例
        cal.calMainRecordsDataTable mycals = new cal.calMainRecordsDataTable();
        cal.calMainRecordsRow mycal = mycals.NewcalMainRecordsRow();
        if (equipment_Name == null) mycal.SetEquipment_NameNull(); else mycal.Equipment_Name = equipment_Name;
        mycal.Cal_Date = cal_Date;
        mycal.Due_Date = due_Date;

        if (vender == null) mycal.SetVenderNull(); else mycal.Vender = vender;
        if (brand == null) mycal.SetBrandNull(); else mycal.Brand = brand;
        if (model == null) mycal.SetModelNull(); else mycal.Model = model;
        if (serial_NO == null) mycal.SetSerial_NONull(); else mycal.Serial_NO = serial_NO;
        if (accuracy == null) mycal.SetAccuracyNull(); else mycal.Accuracy = accuracy;
        mycal.Class = myclass;
        mycal.Status = status;
        mycal.WI_NO = wI_NO;

        if (drawing_NO == null) mycal.SetDrawing_NONull(); else mycal.Drawing_NO = drawing_NO;

        if (remark == null) mycal.SetRemarkNull(); else mycal.Remark = remark;
        mycals.AddcalMainRecordsRow(mycal);
        int rowsAffected = Adapter.Update(mycals);
        // 如果刚好新增了一条记录,则返回true,否则返回false
        return rowsAffected == 1;
    }

当我单击“插入”的时候,输入ID:T0005:,Cal_Date:2010-12-24,Due_Date:2010-12-24,其它留空或者随便输入字符,点击插入,都是提示:“输入字符串的格式不正确”
要疯了!
#13
筱晓绾2010-12-24 15:58
老大,还在纠结中啊!!!
#14
筱晓绾2010-12-24 15:59
看了一下 ,那是因为你没有做验证...本来是int类型的数据,你在文本框里面输入"sss",插入数据库中的时候sss无法转换为int类型,因此报错!!!
1