在表现层使用DetailView的插入数据的时候,提示:错误 3 类型“string”必须是不可为 null 的值类型才能用作泛型类型或方法“System.Nullable<T>”中的参数“T” E:\asp.net 2.0\aa\WebSite2\App_Code\BLL\calBLL.cs 69 21 E:\...\WebSite2\
我的数据表名称: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          不容许空
Re                varchar(255) 容许空

我写的方法:  
      
    [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)]
public bool AddcalMainRecords(string myEquipment_Name,DateTime? myCal_Date, DateTime? myDue_Date,string myVender, string myBrand, string myModel, string mySerial_NO, string myAccuracy, string? myClass,string? myStatus, string? myWI_NO, string myDrawing_NO,string myRe,int myID)      {
        // 新建一个calMainRecordsRow实例
        cal.calMainRecordsDataTable mycals=new cal.calMainRecordsDataTable();
        cal.calMainRecordsRow mycal=mycals.NewcalMainRecordsRow();
        //mycal.Equipment_Name = myEquipment_Name.ToString();
        if (myEquipment_Name == null) mycal.SetEquipment_NameNull(); else mycal.Equipment_Name = myEquipment_Name.ToString();
        if (myVender == null) mycal.SetVenderNull(); else mycal.Vender = myVender.ToString();
        if (myBrand == null) mycal.SetBrandNull(); else mycal.Brand = myBrand.ToString();
        if (myModel == null) mycal.SetModelNull(); else mycal.Equipment_Name = myEquipment_Name.ToString();
        if (mySerial_NO == null) mycal.SetSerial_NONull(); else mycal.Serial_NO = mySerial_NO.ToString();
        if (myAccuracy == null) mycal.SetAccuracyNull(); else mycal.Accuracy = myAccuracy.ToString();
        if (myDrawing_NO == null) mycal.SetDrawing_NONull(); else mycal.Drawing_NO = myDrawing_NO.ToString();
        //少了Renter_ID和Rent_Date
        if (myRe == null) mycal.SetReNull(); else mycal.Re = myRe.ToString();
        mycals.AddcalMainRecordsRow(mycal);
        int rowsAffected = Adapter.Update(mycals);
        // 如果刚好新增了一条记录,则返回true,否则返回false
        return rowsAffected == 1;
    }

解决方案 »

  1.   

    http://www.phpfans.net/article/htmls/201012/MzIyMTg2.html
    http://hi.baidu.com/cxl_goto/blog/item/aabb09d7b9f9efd5a044df02.html
      

  2.   

    他这上面指的有3行一样的错误:
    string”必须是不可为 null 的值类型才能用作泛型类型或方法“System.Nullable<T>”中的参数“T”我想问下是因为我上面方法的数据类型定义错了还是?
    我已经给出了数据库结构,能否帮忙找下到底是哪3个string类型定义错误,我已经找过了,都找不到。
      

  3.   

    if (myVender == null) 改为if ( string.IsNullOrEmpty(myVender))
      

  4.   

    string?改成string...string是引用类型,本来就可为null,可空泛型结构只允许用于值类型...基础...
      

  5.   

    string str=null;
    string.ISNullOrEmpty(str) 可为null