主题:  (ASP.NET代码)对于Null值的头痛问题,寻找好办法

dreamexpress_5d

职务:普通成员
等级:1
金币:10.0
发贴:2229
#12004/10/18 16:47:39
[问题1]

部门DEPARTMENT表中有一字段DPTHEAD(部门负责人),是一个INT类型,引用用户表USER中的USERID字段的。DPTHEAD允许NULL值。

在ASPX页面中,采用一下拉列表框ddlDPTHEAD来采集数据,

  With ddlDPTHEAD.Items
            .Add(New ListItem("[请选择部门]", "NULL"))
            .Add(New ListItem("人事处", "1"))
            .Add(New ListItem("电脑部", "2"))
.....
 End With


定义了一个department类,用来接收页面采集数据,

department.dpthead属性是STRING类型。


department.dpthead=ddlDPTHEAD.selectvalue,然后通过SQL语句保存到数据库中。
麻烦来了。。。


当用户未选择部门时,即选择的是ddlDPTHEAD.selectvalue="NULL"时,不能存入数据库中....

因为

Dim MySQL As String = "INSERT INTO Department (DptName, DptHead) "

            MySQL &= "VALUES ('" & Department.dptName & "' , '"
          MySQL &= Department.dptHEAD & "')"

ObjSql.STRSQL=MYSQL'命令字符串

 ObjSql.ExecuteSQL()'执行SQL语句(自定义的方法,正常工作)


============

当Department.dptHEAD="NULL"时,SQL语句中NULL是不能用引号括起来的!这不是麻烦了吗?每次要判断是不是NULL,要分别写2个SQL语句吗??要是多个这种字段的话,麻烦不更大?

这类问题不知道大家有什么好的方法呢?

编辑历史:[此帖最近一次被 dreamexpress 编辑过(编辑时间:2004-10-18 17:03:02)]


dreamexpress_5d

职务:普通成员
等级:1
金币:10.0
发贴:2229
#22004/10/18 16:58:07
还有个问题:

[问题2]
当读出一个字段,比如用户的[真实姓名]字段,有的用户没有提供真名(为NULL值),将其读出来时,如想用一个Label.text来显示的话,Null又不能直接转换为STRING,程序出错,又得处理NULL值!

这个问题也让人烦,得对每个用户的[真实姓名]字段进行判断,这种字段多的话,程序效率自然就不高了,也许某些字段NULL值仅那么1、2个,为此不得不去判断另外N-2个根本无须判断的非NULL值,晕。。。有没有好办法????

编辑历史:[此帖最近一次被 dreamexpress 编辑过(编辑时间:2004-10-18 17:04:33)]


蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#32004/10/18 19:47:53
String slq = ""

sql &= "INSERT INTO Department (DptName, EptHead) valueS ("
sql &= "'" & Department.dptName "',"

If lstDepartment.SelectVlue = "Null" Then
    sql &= "Null" & ")"
Else
    sql &= "'" & Department.dptHEAD & "')"
End If

用ASP.NET,用ADO效率不高,应该用ADO.Net。

String strConnection = "...."
SqlConnection myConnection = new SqlConnection(strConnection)

SqlCommand mySqlCommand = myConnection.CreateCommand()
mySqlCommand.CommandText = "INSERT INTO......"

myConnection.Open()

mySqlCommand.ExecuteNonQuery()

myConnection.Close()
myConnection.Dispose()

读出来时,用SQL可以把NULL值转化

SELECT ISNULL(DptName, '') FROM Department
SELECT ISNULL(UnitPrice, 0.00) FROM Product

不过ACCESS不一定能用,可用函数转化,如定义函数IfNullString()输出至文本框
其实也不一定要定义,如你用DataReader
TextBox1.Text = myDataReader("DptName").ToString
或DataSet
TextBox1.Text = myDataSet.Tables("Department").Rows(2)("DptName").ToString

编辑历史:[此帖最近一次被 蓝鲸 编辑过(编辑时间:2004-10-18 19:55:49)]

非常大鱼

dreamexpress_5d

职务:普通成员
等级:1
金币:10.0
发贴:2229
#42004/10/19 13:59:07
感谢蓝鲸的指导,学习一下。

我从ASP转过来,好多概念还没能完全转过来,还不能完全理解ADO.Net的效率问题,得多研究一下,谢谢!