DBNull用法
dbeaver db2 触发器的语法规则
dbeaver db2 触发器的语法规则(原创版)目录1.DB2 触发器的概念和作用2.DB2 触发器的语法规则3.DB2 触发器的示例正文DB2 触发器是一种与数据库表相关的预定义 SQL 操作,它在数据表中执行 INSERT、UPDATE 或 DELETE 操作时自动触发执行。
触发器可以帮助你维护数据的完整性和一致性,确保数据的有效性和正确性。
在 DB2 中,触发器是一种非常有用的功能,可以用于实现复杂的业务规则和数据约束。
DB2 触发器的语法规则如下:1.创建触发器CREATE TRIGGER trigger_nameAFTER INSERT | UPDATE | DELETEON table_nameREFERENCING NEW AS new OLD AS oldFOR EACH ROWBEGIN-- 触发器体,即执行的操作END;2.删除触发器DROP TRIGGER trigger_name;3.修改触发器ALTER TRIGGER trigger_nameAFTER INSERT | UPDATE | DELETEON table_nameREFERENCING NEW AS new OLD AS oldFOR EACH ROWBEGIN-- 修改触发器体END;下面是一个 DB2 触发器的示例,假设有一个名为“students”的数据表,我们希望在学生信息发生更新时,将更新前的信息插入到另一个名为“audit_trail”的表中。
创建触发器:CREATE TRIGGER audit_trail_triggerAFTER UPDATEON studentsREFERENCING NEW AS new OLD AS oldFOR EACH ROWBEGININSERT INTO audit_trail (student_id, old_name, new_name) VALUES (OLD.student_id, , );END;这个触发器在“students”表发生更新时触发,将更新前的学生信息插入到“audit_trail”表中。
C#数据库编程中的 DBNull问题
if (vTp.FullName == "System.DBNull")
{
int iTT2 = 0;
}
if (vBeg == DBNull.Value)
{
int iTT = 0;
C#数据库编程中的 DBNulToBoolean(vRow["IsAuthorized"]);
//dtBeg = Convert.ToDateTime(vRow["BeginDate"]);
object vBeg = vRow["BeginDate"];
}
bool isDBNull = Convert.IsDBNull(datatable.rows[0][0]);
C# 中 DBNull.Value 表示 数据库中的 null 值 数据库使用 NULL 是 正常情况,并非设计问题
DBNull是程序员必须手动处理的,对于取出来的字段,都先要有这个判断
DBNull.Value这个值对应数据库中的null,只有与数据库操作时用的到。比如数据库中的Remark列设为可以为空。在后台你给Remark属性默认值设为为DBNull.Value。
对应sql语句为insert ********Remark=@rm**;这个看的懂吧。将参数rm值给Remark。如果后台你不给rm值,那么用默认值DBNull.Value.不然就会报“未将对象引用到实例的错误”
mongodb 空字符串和null
MongoDB 空字符串和null1. 简介在MongoDB中,空字符串和null是常见的数据类型。
本文将深入探讨MongoDB中空字符串和null的含义、用法以及它们在查询和更新操作中的区别。
2. 空字符串的含义和用法空字符串是指长度为0的字符串,表示没有任何字符。
在MongoDB中,空字符串可以用来表示一个字段的值为空。
在插入文档时,可以将字段的值设置为空字符串。
2.1 插入文档时使用空字符串db.collection.insertOne({ name: "", age: 25 })上述代码将在名为collection的集合中插入一条文档,其中name字段的值为空字符串,age字段的值为25。
2.2 查询空字符串的文档可以使用空字符串来查询包含空字符串的文档。
例如,要查询name字段值为空字符串的文档,可以使用以下代码:db.collection.find({ name: "" })上述代码将返回name字段值为空字符串的所有文档。
2.3 更新空字符串的文档可以使用更新操作来修改字段的值为空字符串。
例如,要将name字段值为空字符串的文档的age字段更新为30,可以使用以下代码:db.collection.updateMany({ name: "" }, { $set: { age: 30 } })上述代码将将name字段值为空字符串的所有文档的age字段更新为30。
3. null的含义和用法在MongoDB中,null表示一个字段的值不存在或未知。
与空字符串不同,null表示没有值。
3.1 插入文档时使用null可以在插入文档时将字段的值设置为null。
例如,要插入一个name字段值为null的文档,可以使用以下代码:db.collection.insertOne({ name: null, age: 25 })上述代码将在名为collection的集合中插入一条文档,其中name字段的值为null,age字段的值为25。
C#中DBNull.Value和Null的用法和区别
C#中DBNull.Value和Null的⽤法和区别
DBNull.Value,, 是适⽤于向数据库的表中插⼊空值。
⽽ null,是指在程序中表⽰空引⽤。
或者对象为空。
就是没有实例化。
row[column]的值为DBNull.Value的话,⾄少说明它是从数据库中取到值了,对应了数据库中的空值;但如果row[column]的值为null的话,说明没有从数据库中取到值。
DBNull.Value是⼀个有着内存地址的具体类型的值,映射了数据库中的null值;⽽NULL则是空指向,不存在对应的内存地址。
任何对象赋值为null后,内存就释放了。
举个例⼦:从数据库读数据返回 DataTable 值。
var data = conn.ExecuteDataTable(sql, "Datatable");
如果A列在数据库中为 null 值
if( data.Rows[0]["A"] == null )这⾥就会报错。
正确的应该是 if(data.Rows[0]["A"] == DBNull.Value) 。
可以对 data.Rows[0]["A"] 添加监视可以看到类型为 Object[DBNull.Value]。
DBNull用法
DBNull用法总结byhubupc一:判断是否为DBNULL 的几种方式(返回多个值的情况)1.public static bool IsDBNull(Object value)如果value 为TypeCode..::.DBNull类型,则为true;否则为false。
2if(Object value is System.DBNull)如果value 为TypeCode..::.DBNull类型,则为true;否则为false。
3DBNull.Value.Equals((Object value)如果value 为TypeCode..::.DBNull类型,则为true;否则为false。
注意:(Object value) 使用Row[“Name”]的形式,不使用的形式,否则失效。
无法将类型为“System.DBNull”的对象强制转换为类型“System.String”。
例如:DataSet1TableAdapters.RegionTableAdapter ta = newDataSet1TableAdapters.RegionTableAdapter();DataSet1.RegionDataTable tb = ta.GetData();TextBox1.Text = "fdsaf";if (tb[4]["RegionDescription"] is System.DBNull)// 不使用tb[4].RegionDescription is DBNull的形式{Response.Write("tb[4]["RegionDescription"]");}if (Convert.IsDBNull(tb[4]["RegionDescription"])){Response.Write("tb[4]["RegionDescription"]");}if (DBNull.Value.Equals(tb[4]["RegionDescription"])){Response.Write("tb[4]["RegionDescription"]");}二:使用须知row[column] 返回的值永远不为 null ,要么就是具体的为column 的类型的值。
vb.net中isnot dbnull用法
中isnot dbnull用法在中,使用数据库操作时,ISNOTDBNULL是一个非常有用的方法,它可以帮助我们判断一个字段是否为空。
下面我将详细介绍ISNOTDBNULL的用法以及一些常见问题。
一、ISNOTDBNULL简介ISNOTDBNULL是Framework的一个运算符,用于检查一个对象是否不为DBNull。
在数据库操作中,当我们尝试访问一个可能为空的字段时,需要先检查该字段是否为空。
如果为空,则需要进行相应的处理,例如跳过该字段,或者返回一个默认值。
使用ISNOTDBNULL可以避免出现NullReferenceException异常。
二、使用方法在中,ISNOTDBNULL的使用非常简单。
通常,我们可以在查询结果集时使用该运算符。
例如,假设我们有一个名为"MyTable"的表,其中有一个名为"MyField"的字段。
我们可以使用以下代码来检查该字段是否不为空:```vbnetDimresult=FromrowInMyTableWhererow.MyFieldIsNotDBNullSele ctrow.MyField```上述代码将返回一个包含所有MyField字段不为空的行的结果集。
如果MyField字段为空,则该行将被排除在外。
三、常见问题在使用ISNOTDBNULL时,可能会遇到一些常见问题。
以下是一些常见问题的解决方法:1.数据库连接问题:确保数据库连接正常,并且没有出现连接错误或异常。
2.查询条件错误:确保查询条件正确,并且只包含需要检查的字段。
3.字段类型不匹配:如果字段类型与查询条件不匹配,可能会出现NullReferenceException异常。
需要确保字段类型与查询条件一致。
4.处理空值:在查询结果中,可以使用IfNotIsDBNull函数来处理可能为空的字段。
例如,可以使用以下代码来获取MyField字段的值:```vbnetDimvalue=If(row.MyFieldIsNotDBNull,row.MyField,Nothing) ```四、总结在中,ISNOTDBNULL是一个非常有用的运算符,可以帮助我们判断一个字段是否不为空。
Dblookup()和DbColumn()的用法及区别
Dblookup()和DbColumn()的用法及区别- - 一、用法:1。
@DbColumn (Notes/Domino 数据库)从活动数据库或其他 Notes/Domino 数据库的视图或文件夹中查找并返回一个完整的值列。
语法@DbColumn( class : "NoCache" ; server : database ; view ; columnNumber ) 参数class文本。
指出用户正在存取的数据库的类型。
可以用 "" 或“Notes” 指示一个Notes/Domino 数据库。
"NoCache"关键字。
可选。
若不使用 "NoCache",查找结果将被缓存,即保存结果以备再次使用。
每次对同一场所(在同一 Notes/Domino 会话期且执行此查找操作的数据库保持打开)的并发查找都会使用此信息。
如果省略了 "NoCache",也不必用其他任何选项替代,查找结果会自动缓存。
请参阅如下“指定NoCache”。
如果要求 Notes/Domino 在每次查找时均能恢复上一次查找信息,可在紧跟class 参数的冒号后边指定此选项,如 "Notes":"NoCache" 所示。
server : database文本列表。
服务器位置和数据库文件名。
请参阅“指定服务器和数据库”。
view文本。
在其中执行查找的视图名。
此视图名必须与“视图”属性中指定的视图全名完全匹配(可以忽略别名)。
如果包含该视图名的视图还层叠有菜单中的另一个名称,请参阅“指定视图名”。
columnNumber数字。
视图中的列号。
由于 Notes/Domino 是基于列号查找视图里的信息,因此只能获得出现视图中的数据。
请参阅“指定列号”。
返回值valuesFound文本、数字、日期-时间或文本列表。
C# DBNULL NULL string.Empty Convert.IsDBNull详解
C# DBNULL NULL "" string.Empty Convert.IsDBNull详解1.C# DBNull的解释:该类用于指示不存在某个已知值(通常在数据库应用程序中)。
在数据库应用程序中,空对象是字段的有效值。
该类区分空值(空对象)和未初始化值(DBNull.V alue实例)。
例如,表可以包含具有未初始化字段的记录。
默认情况下,这些未初始化字段具有DBNull值。
该类还可以用于在COM Interop中区分VT_NULL 变量(与空对象关联)和VT_EMPTY 变量(与DBNull.V alue实例关联)。
DBNull 从不等于任何值。
C# DBNull 是一个单独的类,这意味着该类只能存在一个实例。
这个唯一的实例是DBNull.V alue。
访问SQL 数据库的数据密集应用程序必须使用System.Data.SqlTypes 类,这些类对空值具有内在支持。
C# DBNull在DotNet是单独的一个类型,该类只能存在唯一的实例,DBNULL.V alue,DBNull 唯一作用是可以表示数据库中的字符串,数字,或日期,为什么可以表示原因是DotNet 储存这些数据的类(DataRow等)都是以object 的形式来储存数据的。
对于DataRow , 它的row[column] 返回的值永远不为null ,要么就是具体的为column 的类型的值。
要么就是DBNull 。
所以row[column].ToString() 这个写法永远不会在ToString那里发生NullReferenceException。
DBNull 实现了IConvertible 。
但是,除了ToString 是正常的外,其他的ToXXX都会抛出不能转换的错误。
2. Nullnull 关键字是表示不引用任何对象的空引用的文字值。
null 是引用类型变量的默认值。
那么也只有引用型的变量可以为NULL,如果int i=null,的话,是不可以的,因为Int是值类型的。
DB常用操作命令
---------除非能确保内层select只返回一个行的值,
---------否则应在外层where子句中用一个in限定符
select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
union [all] ----- union合并查询结果集,all-保留重复行
select stockname from table2
***insert***
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
DELETE --从数据库表中删除数据行
UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创建一个数据库表
DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表结构
CREATE VIEW --创建一个视图
DROP VIEW --从数据库中删除视图
外关键字约束
唯一性约束
检查约束
缺省约束
完整性规则
CREATE RULE rule_name AS condition_expression
sp_helptext [@objname =] 'name'
DROP RULE {rule_name} [,...n]
C#中System.DBNull的问题
C#中System.DBNull的问题在使⽤ DataTable 的时候,经常会出现字段值是 System.DBNull 的情况,如果不做判断就会抛出⼀下异常提⽰:// 如果没有输⼊长度限制值或长度值解析失败,则默认不做限制,长度判断值设置为整数最⼤值int length = 0;length = Int32.TryParse(((item["LengthConstraint"])) ? "" : item["LengthConstraint"].ToString(), out length) ? length : Int32.MaxValue;注意:System.DBNull 和 null 是不⼀样的,两者⽤ == 或者 equals 判断返回的是 false。
下⾯的⽰例调⽤DBNull.Value.Equals⽅法来确定联系⼈数据库中的数据库字段是否具有有效的值。
如果是这样,则将字段值追加到标签中的字符串输出。
参考链接:private void OutputLabels(DataTable dt){string label;// Iterate rows of tableforeach (DataRow row in dt.Rows){int labelLen;label = String.Empty;label += AddFieldValue(label, row, "Title");label += AddFieldValue(label, row, "FirstName");label += AddFieldValue(label, row, "MiddleInitial");label += AddFieldValue(label, row, "LastName");label += AddFieldValue(label, row, "Suffix");label += "\n";label += AddFieldValue(label, row, "Address1");label += AddFieldValue(label, row, "AptNo");label += "\n";labelLen = label.Length;label += AddFieldValue(label, row, "Address2");if (label.Length != labelLen)label += "\n";label += AddFieldValue(label, row, "City");label += AddFieldValue(label, row, "State");label += AddFieldValue(label, row, "Zip");Console.WriteLine(label);Console.WriteLine();}}private string AddFieldValue(string label, DataRow row,string fieldName){if (! DBNull.Value.Equals(row[fieldName]))return (string) row[fieldName] + "";elsereturn String.Empty;}。
db命令实例大全
db2命令实例大全管理命令:create database mbmst using codeset GBK territory CN1.启动数据库db2start2.停止数据库db2stop3.连接数据库db2 connect to o_yd user db2 using pwd4.读数据库管理程序配置db2 get dbm cfg5.写数据库管理程序配置db2 update dbm cfg using 参数名参数值6.读数据库的配置db2 connect to o_yd user db2 using pwddb2 get db cfg for o_yd查看数据库字符集7.写数据库的配置db2 connect to o_yd user db2 using pwddb2 update db cfg for o_yd using 参数名参数值8.关闭所有应用连接db2 force application alldb2 force application ID1;ID2;;;Idn MODE ASYNCdb2 list application for db o_yd show detail9.备份数据库db2 force application alldb2 backup db o_yd to d:db2 initialize tape on \\.\tape0db2 rewind tape on \\.\tape0db2 backup db o_yd to \\.\tape010.恢复数据库db2 restore db o_yd from d: to d:db2 restore db o_yd from \\.\tape0 to d:11.绑定存储过程db2 connect to o_yd user db2 using pwddb2 bind c:\dfplus.bnd拷贝存储过程到服务器上的C:\sqllib\function目录中12.整理表db2 connect to o_yd user db2 using pwddb2 reorg table ydddb2 runstats on table ydd with distribution and indexes all 13.导出表数据db2 export to c:\dftz.txt of del select * from dftzdb2 export to c:\dftz.ixf of ixf select * from dftz14.导入表数据import from c:\123.txt of del insert into ylbx.czyxxdb2 import to c:\dftz.txt of del commitcount 5000 messages c:\dftz.msg insert into dftzdb2 import to c:\dftz.ixf of ixf commitcount 5000 messages c:\dftz.msg insert into dftzdb2 import to c:\dftz.ixf of ixf commitcount 5000 insert into dftzdb2 import to c:\dftz.ixf of ixf commitcount 5000 insert_update into dftzdb2 import to c:\dftz.ixf of ixf commitcount 5000 replace into dftzdb2 import to c:\dftz.ixf of ixf commitcount 5000 create into dftz 仅IXFdb2 import to c:\dftz.ixf of ixf commitcount 5000 replace_create into dftz 仅IXF 15.执行一个批处理文件db2 -tf 批处理文件名文件中每一条命令用;结束16.自动生成批处理文件建文本文件:temp.sqlselect 'runstats on table DB2.' || tabname || 'with distribution and detailed indexes all;'from syscat.tables where tabschema='DB2' and type='T';db2 -tf temp.sql>runstats.sql17.自动生成建表视图语句在服务器上:C:\sqllib\misc目录中db2 connect to o_yd user db2 using pwddb2look -d o_yd -u db2 -e -p -c c:\o_yd.txt18.其他命令grant dbadm on database to user bb19.select * from czyxx fetch first 1 rows only20db2look -d ylbx -u db2admin -w -asd -a -e -o a.txt21. 显示当前用户所有表list tables22.列出所有的系统表list tables for system23.查看表结构db2 describe select * from user.tables24.在db2cmd界面下运行db2licm -l;可以很明显的看到许可证已经过期了26.DB2命今行中避开按回车执行命令select * \from tableName27.建远程数据库db2 catalog db 远程数据库名 as 本地别名 at node hongtadb2 terminate28.创建和删除实例:A.要在 Windows 中创建实例;只需发出以下命令:db2icrt instance_nameB.在 UNIX 中;还必须提供用户标识;用来创建受防护的用户定义的函数和存储过程进程;如:db2icrt -u fenced_user_ID instance_nameC.要删除实例;应断开与所有数据库的连接;然后停止该实例..以下命令将终止所有数据库连接;停止实例;然后删除它..db2idrop -f instance_name29.列出、迁移和更新 DB2 实例A.要列出服务器上存在的 DB2 实例;可使用以下命令:db2ilistB.如果安装了 DB2 UDB 的更新版本或要将某一实例迁移为 64 位实例;则需要迁移实例..在 Windows 上;实例迁移在必需的迁移处理期间隐式地完成..在 UNIX 上;显式地使用以下命令迁移现有实例:db2imigr instance_nameC.如果安装了某些产品选项或修订包;则现有的 DB2 实例及其相关的数据库都需要拥有对这些新功能的访问权..使用以下命令更新实例:db2iupdt instance_name30.快速清空一个表不写日志alter table activate not logged initially with empty table31.用db2expln查看一个或多个SQL语句的访问计划a单个SQLdb2expln -d -q -t比如:db2expln -d sample -q "select * from staff " -tb多个SQL语句;i. 将所有SQL语句放在一个文件中;以;分隔ii. 运行命令:db2expln -d <数据库名> -f <文件名> -t -z ;注意z后面有个空格;然后再跟;iii. 查看db2expln的命令语法;直接打db2expln -h命令或参考db2的在线帮助32.用db2batch查看一个或多个SQL语句的执行性能a 将所有的SQL语句放在一个文件中;以;分隔b 执行命令:db2batch -d <数据库名> -f -o r 0 f 0c 查看db2batch的帮助信息; db2batch -h或参照在线帮助33.整理表db2 connect to databasename user db2 using pwddb2 reorg table ydddb2 runstats on table ydd with distribution and indexes all34.授权命令grant dbadm on database to user bb35. Catalog:编目数据库或节点CATALOG DATABASE database-name AS alias ON drive | AT NODE node-nameAUTHENTICATION {SERVER | CLIENT | DCS | DCE SERVER PRINCIPAL principalname |KERBEROS TARGET PRINCIPAL principalname | SERVER_ENCRYPT | DCS_ENCRYPT}WITH "comment-string"CATALOG ADMIN TCPIP NODE node-name REMOTE hostname SERVER service-nameSECURITY{SOCKS} REMOTE_INSTANCE instance-nameSYSTEM system-name OSTYPE os-type WITH "comment string"36.Uncatalog:功能与上相反;删除已经编目的数据库或节点注:执行完catalog或者uncatalog后;需要执行terminate;实现刷新目录列表的作用..Terminate的功能是终止clp的后台进程;在此clp下的连接将全部断开;同时本连接下做的数据库更改做一个内部提交..37. Attach:建立一个到数据库实例的连接;执行实例级别的命令;比如create database;force applications等;需要实例级的用户权限..38. Load:导入数据注意自动生成列数据导入问题:需要加MODIFIED BY GENERATEDMISSING可空下保持空; GENERATEDIGNORE非空将添入默认;可空将保持空状态; GENERATEDOVERRIDELOAD非空下导入原来表中的值;比较有用39. Runstats:运行统计;更新系统目录表中的信息系统编目表包含关于字段、表和索引的信息;包含诸如表中的行数、一个表或者索引的空间使用、在字段中不同的值的数量等信息..Runstats统计信息能用在2个方面:显示资料的物理构成和给DB2提供优化器;以便在执行SQL语句的时候选择最佳访问路径..RUNSTATS ON TABLE table-name40. 查看本地节点目录命令窗口中输入:db2 list node directory41. 编目一个TCP/IP节点命令窗口:db2 catalog tcpip node <node_name> remote <hostname|ip_address> server <svcname|port_number> ostype <OS2|AIX|WIN95|NT|HPUX|SUN|MVS|OS400|VM|VSE|SCO|SGI|LINUX|DYNIX>42. 取消节点编目db2 uncatalog node <node_name>43. 查看系统数据库目录db2 list database directory44. 查看本地数据库目录db2 list database directory on <盘符>在本地数据库目录中有而系统数据库目录中没有的数据库不能访问;可以在控制中心中选中<数据库>右键单击选择添加;然后输入需要添加的数据库名称或者点击刷新按钮选择数据库;加入数据库后即可以访问..46. 编目数据库db2 catalog database <db_name> as <db_alias> at node <node_name>47. 取消数据库编目db2 uncatalog database <db_name>48. 测试远程数据库的连接db2 connect to <db_alias> user <user_id> using <password>49. 任何用户均可通过设置Current Schema专用寄存器为特定的数据库连接设置默认模式;初始默认值为当前会话用户的权限ID..set schema = <schema name>可以由用户交互式的使用;也可在应用程序中使用;如果用Dynamicrules Bind选项绑定包;这个语句就没有作用..此语句不在事务控制之下..50. 代码页的设置在创建数据库时设置字符集create database <db_name> using codeset <codeset> territory <territiry> 例:create database dbtest using codeset IBM-437 territory US也可以设置整个数据库的代码页;在win2000/NT/xp中;在我的电脑-->属性-->高级-->环境变量中添加变量DB2CODEPAGE = <codepage>;例:DB2CODEPAGE = 437 或 DB2CODEPAGE = 1386..或者在IBM DB2命令窗口输入 db2set DB2CODEPAGE=1386;设置后需要重新启动DB2生效..51. DB2低版本数据到高版本的迁移先将低版本数据备份使用恢复功能导入高版本数据库;然后在命令窗口输入 db2 migrate database <db_name>..52. 表名或模式中含有引号时访问表命令窗口:db2 select * from \"tabschema\".\"tabname\"命令行处理器:db2=> select * from "tabschema"."tabname"53. 导出数据库的表结构生成DDL文件命令窗口:db2look -d <db_name> -e -c -o <file_name>54. 执行脚本文件命令窗口:db2 -tvf <file_name>55. 代码页的转换56. 获取当前DB2的版本select * from sysibm.sysversions57. DB2表的字段的修改限制只能修改VARCHAR2类型的并且只能增加不能减少alter table <tb_name> alter column <col_name> set data type varcharSIZE 58. 如何查看表的结构describe table <tb_name>ordescribe select * from <schema>.<tb_name>59. 如何快速清除一个大表ALTER TABLE TABLE_NAME ACTIVE NOT LOGGED INITALLY WITH EMPTY TABLE60. 如何查看数据库的存储过程SELECT * FROM SYSCAT.PROCEDURES61. 如何查看表的约束SELECT * FROM SYSCAT.CHECKS WHERE TABNAME = <tb_name>62. 如何查看表的引用完整约束SELECT * FROM SYSCAT.REFERENCES WHERE TABNAME = <tb_name>63. 如何知道BUFFERPOOLS状况select * from SYSCAT.BUFFERPOOLS64. 如何在命令行下查看修改实例和数据库配置参数查看实例配置参数: db2 get dbm cfg修改实例配置参数: db2 update dbm cfg using 参数名新值查看数据库配置参数: db2 get db cfg for <db_name>修改数据库配置参数: db2 update db cfg for <db_name> using 参数名新值65. 如何修改缓冲区增加缓冲区: create bufferpool <buf_name> size <number of pages> pagesize 4096 {not EXTENDED STORAGE}修改缓冲区: alter bufferpool <buf_name> size <number of pages> {not EXTENDED STORAGE}删除缓冲区: drop bufferpool <buf_name>如果缓冲区大小设置为 -1 表示缓冲池的页面数目由数据库配置参数buffpage决定..注意: 数据库配置参数buffpage仅对缓冲区大小设置为 -1 的缓冲池起作用..66. 多个字段时如何不通过使用select子句使用in/not inselect * from tabschema.tabname where colA; colB; colC not in values valueA1; valueB1; valueC1; valueA2; valueB2; valueC2; ...valueAn; valueBn; valueCn67. 查看当前连接到数据库的应用db2 list application show detail68. 如何确认DB2数据库的一致性db2dart <db_name> /DB/DB表示检查整个数据库的一致性69. 测试SQL语句的性能db2batch -d <db_name> -f <file_name> -a userid/passwd -r <outfile_name>-r 选项表示将查询结果输出到一个文件中..70. 导出某个表的数据export to <Derectry><filme>如:导出用户表export to c:\user.ixf of ixf select * from user71. 导入数据import from如:导入用户表..导入时可以直接建立新表..如果有该表存在也可以用INSERT 插入;或者用UPDATE更新import from c:\user.ixf of ixf Create/Insert into / update tablename72.增加字段并设置默认值ALTER TABLE DC_DMDL_GRAN ADD COLUMN SHOW_DEAL CHAR1;UPDATE DC_DMDL_GRAN SET SHOW_DEAL = '1';注意事项1.如何在CLP执行操作系统的命令在命令前加""作为前缀DB2=> cd C:\2.用db2move时要注意什么不要将系统表也导出进去了3.数据库备份db2 backup db dbdata to d:\backup 只能备份到数据库所在地4.字符集为IBM-1381数据库导到字符集为UTF-8的数据库中会有问题DB2MOVE时;字段不够长5.JDBC DRIVER 4型只支持字符集为UTF-8的数据库;若联字符集为别的数据库报encoding not support.该问题是由于IBM的jdk与SUN的jdk不兼容引起的;我在astkwebsphere的java开发工具中测试;无此问题6.UNIX上启动DB2ADMIN START 要用DB2AS用户7.看DB2那些表被应用程序锁住了db2 get snapshot for locks on dbdata > listappln.txt关掉这些应用程序db2 "force application '342'"一、常用命令1. 建立数据库DB2_GCBCREATE DATABASE DB2_GCB ON G: ALIAS DB2_GCBUSING CODESET GBK TERRITORY CN COLLATE USING SYSTEM DFT_EXTENT_SZ 322. 连接数据库connect to sample1 user db2admin using 83012063. 建立别名create alias db2admin.tables for sysstat.tables;CREATE ALIAS DB2ADMIN.VIEWS FOR SYSCAT.VIEWScreate alias db2admin.columns for syscat.columns;create alias guest.columns for syscat.columns;4. 建立表create table zjt_tables asselect * from tables definition only;create table zjt_views asselect * from views definition only;5. 插入记录insert into zjt_tables select * from tables;insert into zjt_views select * from views;6. 建立视图create view V_zjt_tables as select tabschema;tabname from zjt_tables;7. 建立触发器CREATE TRIGGER zjt_tables_delAFTER DELETE ON zjt_tablesREFERENCING OLD AS OFOR EACH ROW MODE DB2SQLInsert into zjt_tables1 valuessubstro.tabschema;1;8;substro.tabname;1;108. 建立唯一性索引CREATE UNIQUE INDEX I_ztables_tabnameON zjt_tablestabname;9. 查看表select tabname from tableswhere tabname='ZJT_TABLES';10. 查看列select SUBSTRCOLNAME;1;20 as 列名;TYPENAME as 类型;LENGTH as 长度from columnswhere tabname='ZJT_TABLES';11. 查看表结构db2 describe table user1.departmentdb2 describe select * from user.tables12. 查看表的索引db2 describe indexes for table user1.department13. 查看视图select viewname from viewswhere viewname='V_ZJT_TABLES';14. 查看索引select indname from indexeswhere indname='I_ZTABLES_TABNAME';15. 查看存贮过程SELECT SUBSTRPROCSCHEMA;1;15;SUBSTRPROCNAME;1;15FROM SYSCAT.PROCEDURES;16. 类型转换castip datatype:varcharselect castip as integer+50 from log_comm_failed17. 重新连接connect reset18. 中断数据库连接disconnect db2_gcb19. view applicationLIST APPLICATION;20. kill applicationFORCE APPLICATION0;db2 force applications all 强迫所有应用程序从数据库断开21. lock tablelock table test in exclusive mode22. 共享lock table test in share mode23. 显示当前用户所有表list tables24. 列出所有的系统表list tables for system25. 显示当前活动数据库list active databases26. 查看命令选项list command options27. 系统数据库目录LIST DATABASE DIRECTORY28. 表空间list tablespaces29. 表空间容器LIST TABLESPACE CONTAINERS FORExample: LIST TABLESPACE CONTAINERS FOR 130. 显示用户数据库的存取权限GET AUTHORIZATIONS31. 启动实例DB2START32. 停止实例db2stop33. 表或视图特权grant select;delete;insert;update on tables to usergrant all on tables to user WITH GRANT OPTION34. 程序包特权GRANT EXECUTEON PACKAGE PACKAGE-nameTO PUBLIC35. 模式特权GRANT CREATEIN ON SCHEMA SCHEMA-name TO USER36. 数据库特权grant connect;createtab;dbadm on database to user37. 索引特权grant control on index index-name to user38. 信息帮助 XXXnnnnn例: SQL3008139. SQL 帮助说明 SQL 语句的语法help statement例如;help SELECT40. SQLSTATE 帮助说明 SQL 的状态和类别代码sqlstate 或 class-code41. 更改与"管理服务器"相关的口令db2admin setid username password42. 创建 SAMPLE 数据库db2sampldb2sampl F:指定安装盘43. 使用操作系统命令dir44. 转换数据类型 castSELECT EMPNO; CASTRESUME AS VARCHAR370FROM EMP_RESUMEWHERE RESUME_FORMAT = 'ascii'45. UDF要运行 DB2 Java 存储过程或 UDF;还需要更新服务器上的 DB2 数据库管理程序配置;以包括在该机器上安装 JDK 的路径db2 update dbm cfg using JDK11_PATH d:\sqllib\java\jdkTERMINATEupdate dbm cfg using SPM_NAME sample46. 检查 DB2 数据库管理程序配置db2 get dbm cfg47. 检索具有特权的所有授权名SELECT DISTINCT GRANTEE; GRANTEETYPE; 'DATABASE' FROM SYSCAT.DBAUTHUNIONSELECT DISTINCT GRANTEE; GRANTEETYPE; 'TABLE ' FROM SYSCAT.TABAUTHUNIONSELECT DISTINCT GRANTEE; GRANTEETYPE; 'PACKAGE ' FROM SYSCAT.PACKAGEAUTH UNIONSELECT DISTINCT GRANTEE; GRANTEETYPE; 'INDEX ' FROM SYSCAT.INDEXAUTHUNIONSELECT DISTINCT GRANTEE; GRANTEETYPE; 'COLUMN ' FROM SYSCAT.COLAUTHUNIONSELECT DISTINCT GRANTEE; GRANTEETYPE; 'SCHEMA ' FROM SYSCAT.SCHEMAAUTH UNIONSELECT DISTINCT GRANTEE; GRANTEETYPE; 'SERVER ' FROM SYSCAT.PASSTHRUAUTH ORDER BY GRANTEE; GRANTEETYPE; 3create table yhdabid varchar10;password varchar10;ywlx varchar10;kh varchar10;create table ywlbbywlbbh varchar8;ywmc varchar6048. 修改表结构alter table yhdab ALTER kh SET DATA TYPE varchar13;alter table yhdab ALTER ID SET DATA TYPE varchar13;alter table lst_bsi alter bsi_money set data type int;insert into yhdab values49. 业务类型说明insert into ywlbb values'user01';'业务申请';'user02';'业务撤消';'user03';'费用查询';'user04';'费用自缴';'user05';'费用预存';'user06';'密码修改';'user07';'发票打印';'gl01';'改用户基本信息';'gl02';'更改支付信息';'gl03';'日统计功能';'gl04';'冲帐功能';'gl05';'对帐功能';'gl06';'计费功能';'gl07';'综合统计'二. 目录视图说明说明目录视图检查约束 SYSCAT.CHECKS列 SYSCAT.COLUMNS检查约束引用的列 SYSCAT.COLCHECKS关键字中使用的列 SYSCAT.KEYCOLUSE数据类型 SYSCAT.DATATYPES函数参数或函数结果 SYSCAT.FUNCPARMS参考约束 SYSCAT.REFERENCES模式 SYSCAT.SCHEMATA表约束 SYSCAT.TABCONST表 SYSCAT.TABLES触发器 SYSCAT.TRIGGERS用户定义函数 SYSCAT.FUNCTIONS视图 SYSCAT.VIEWS三. 字符串类型二进制大对象 BLOB 字符串..字符大对象 CLOB 字符串;它的字符序列可以是单字节字符或多字节字符;或这两者的组合..双字节字符大对象 DBCLOB 字符串;它的字符序列是双字节字符..四. 数据库范式第一种规范形式:表中的每一行和每一列均有一个值;永远不会是一组值..第二种规范形式:不在关键字中的每一列提供取决于整个关键字的事实..第三种规范形式:每个非关键字列提供与其他非关键字列无关并只取决于该关键字的事实..第四种规范形式:没有行包含有关一个实体的两个或更多个独立的多值事实..五. 数据类型数据类型类型特性示例或范围CHAR15 定长字符串最大长度为 254 'Sunny day 'VARCHAR15 变长字符最大长度为 4000 'Sunny day'SMALLINT 数字长度为 2 字节精度为 5 位范围为-32768 至 32767REAL 数字单精度浮点32 位近似值范围为-3.402E+38至-1.175E-37或1.175E-37 至-3.402E+38或零DOUBLE 数字双精度浮点64 位近似值范围为-1.79769E+308 至-2.225E-307或 2.225E-307 至 1.79769E+308或零DECIMAL5;2 数字精度为 5小数位为 2 范围为 -10**31+1 至 10**31-1 DATE 日期时间三部分值 1991-10-27六. 列函数列函数对列中的一组值进行运算以得到单个结果值..下列就是一些列函数的示例..AVG返回某一组中的值除以该组中值的个数的和COUNT返回一组行或值中行或值的个数MAX返回一组值中的最大值MIN返回一组值中的最小值七. 标量函数标量函数对值进行某个运算以返回另一个值..下列就是一些由DB2 通用数据库提供的标量函数的示例..ABS返回数的绝对值HEX返回值的十六进制表示LENGTH返回自变量中的字节数对于图形字符串则返回双字节字符数..YEAR抽取日期时间值的年份部分.part1.rar 1 MB。
对象不能从DBNull转换为其他类型
对象不能从DBNull转换为其他类型--------------------------------------------------------------------------------------------------------对象不能从 DBNull 转换为其他类型prmSid.Value 返回的值是DBNull,也就是说相当于数据库单元格中什么值也没有。
你需要事先判断这种情况。
**********处理方法:在处理数据的时候如果数据库里面的值为null,就会出现以上错误.如:num = Convert.ToInt32(dtedit.Rows[k][i]),如果此时dtedit.Rows[k][i]的值为null 就会出现这个错误.解决办法:1.if (dtedit.Rows[k][i] == DBNull.Value)num = 0;elsenum = Convert.T oInt32(dtedit.Rows[k][i]);2.在读取数据库数据时判断.如"Select IsNull(score,0) from score" 先把为null的数据表示为0--------from:/doc/662594902.html,/fmhyht/blog/i tem/5edb5acf42090f3bf9dc61df.html ------------------ 其实对于这个问题,还有一个办法,还是不错的:那就是用TryParse,Convert.T oInt32 与int.Parse 较为类似,实际上Convert.T oInt32 内部调用了int.Parse:Convert.T oInt32 参数为 null 时,返回 0;int.Parse 参数为 null 时,抛出异常。
Convert.T oInt32 参数为 "" 时,抛出异常;int.Parse 参数为 "" 时,抛出异常。
mongodb 空字符串和null
mongodb 空字符串和nullMongoDB是一种流行的NoSQL数据库,它支持存储空字符串和null值。
在MongoDB中,空字符串和null值有着不同的含义和用途。
空字符串在MongoDB中表示一个空的字符串值,它是一个有效的值。
当我们需要存储一个空字符串时,可以将其作为一个字段的值存储在MongoDB中。
例如,如果我们有一个用户文档,其中包含一个名字字段,但是某些用户没有提供他们的名字,我们可以将该字段的值设置为空字符串。
这样,我们就可以在查询时检查该字段是否为空字符串,以确定用户是否提供了他们的名字。
另一方面,null值在MongoDB中表示一个缺失的值。
当我们需要表示一个缺失的值时,可以将其设置为null。
例如,如果我们有一个订单文档,其中包含一个付款日期字段,但是某些订单尚未付款,我们可以将该字段的值设置为null。
这样,我们就可以在查询时检查该字段是否为null,以确定订单是否已付款。
在MongoDB中,空字符串和null值的处理方式略有不同。
当我们查询一个包含空字符串的字段时,MongoDB会将其视为一个有效的字符串值,并将其返回。
但是,当我们查询一个包含null值的字段时,MongoDB会将其视为一个缺失的值,并将其返回为null。
这意味着我们可以使用空字符串来表示一个空的值,但是我们不能使用null来表示一个空的字符串值。
在MongoDB中,空字符串和null值的使用取决于我们的数据模型和业务需求。
在某些情况下,空字符串可能更适合表示一个空的值,而在其他情况下,null值可能更适合表示一个缺失的值。
因此,我们需要根据具体情况来选择使用哪种值。
总之,MongoDB支持存储空字符串和null值,并且它们在MongoDB中有着不同的含义和用途。
我们可以根据具体情况来选择使用哪种值,以满足我们的业务需求。
达梦 null 空字符串
达梦 null 空字符串
达梦数据库中的null和空字符串是数据库中常见的概念,它们在数据处理和查询中有着不同的含义和用途。
首先,让我们来看看null值。
在达梦数据库中,null代表着缺少值或未知值。
当某个字段的值为null时,表示该字段的值是未知的或者不存在的。
在数据库中,null不同于0或空字符串,它是一个独立的概念,用来表示缺失或未知的值。
另一方面,空字符串则表示一个字符串对象中没有包含任何字符。
在达梦数据库中,空字符串和null是两个不同的概念。
空字符串是一个有效的字符串,它占据了一定的内存空间,而null则表示缺失值,不占据实际的内存空间。
在实际的数据库操作中,对于null值和空字符串的处理通常是不同的。
在查询数据时,需要考虑到这两者的区别。
比如在进行条件筛选时,需要使用IS NULL或IS NOT NULL来判断字段是否为null,而对于空字符串则可以直接使用=或!=进行判断。
另外,在数据库设计和数据存储过程中,也需要考虑到对null
值和空字符串的处理。
有些情况下,null值可能是合法的,表示某个字段的值确实是未知的;而空字符串则可能是需要特殊处理的情况,需要根据实际业务需求来确定如何处理这些空字符串。
总之,在达梦数据库中,null和空字符串是两个不同的概念,需要在数据处理和查询中加以区分和处理,以确保数据的准确性和完整性。
[其他语言学习]DB2关联时资料库查询语句基本语法
DB2关联时资料库查询语句基本语法DB2 提供了关连式资料库的查询语言SQL(StrUCtured Query Language),是一种非常口语化、既易学又易懂的语法。
此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操作,包含了资料的定义(DDL)以及资料的处理(DML)。
SQL原来拼成SEQUEL,这语言的原型以“系统R“的名字在IBM 圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统R 的技术基础发展出来IBM 的产品。
而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在1987遵循一个几乎是以IBM SQL 为基础的标准关连式资料语言定义。
一、资料定义DDL(Data Definition Language)资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。
1、建表格:CREA TE TABLE table_name(column1 DA TA TYPE [NOT NULL] [NOT NULL PRIMARY KEY],column2 DA TA TYPE [NOT NULL],...)说明:DA TA TYPE --是资料的格式,详见表。
NUT NULL --可不可以允许资料有空的(尚未有资料填入)。
PRIMARY KEY --是本表的主键。
2、更改表格ALTER TABLE table_nameADD COLUMN column_name DA TA TYPE说明:增加一个栏位(没有删除某个栏位的语法。
ALTER TABLE table_nameADD PRIMARY KEY (column_name)说明:更改表得的定义把某个栏位设为主键。
ALTER TABLE table_nameDROP PRIMARY KEY (column_name)说明:把主键的定义删除。
【推荐下载】.NET-允许在DB字段中使用null吗?
.NET:允许在DB 字段中使用null 吗?2010/04/14 1203 I have the task of re-factoring an SQLServer DB.... A lot of the tables and columns “ALLOW NULLS”, Is this good practice...我的任务重构一个DB ....状态”置疑”很多表和列“允许空值”,这是一个很好的实践……I seem to remember the authour of saying it was really bad practice to allow nulls in a DB...我似乎还记得CSLA 的认证。
NET 说在DB 中允许null 是非常糟糕的做法。
If this is the case, what are my alternatives?如果是这样的话,我的选择是什么?Remove all “ALLOW NULLS”from all columns.... and in numeric columns use a value of -1 for example??删除所有“允许null”所有列....在数字列中使用-1 的值?I would really appreciate any input anyone has.我真的很感激任何人的投入。
I am currently using a Model (from entity framework) from my DB and the db columns that “ALLOW NULLS” are null ... and some of the stored procedures require that i have a default value... i.e. BOOLEAN require FALSE as default ... but it is null..我目前使用的模型(来自实体框架)来自我的DB, DB 列“允许null”是空的…一些存储过程要求我有一个默认值…也就是说,布尔值为FALSE 作为默认值…但它是零. .Well i don’t want to stray from my original question, ALLOW NULLS are a bad thing from what i can gather .... so how do i fix this ?我不想偏离我的原始问题,允许null 是一件坏事我可以收集....那么如何解决这个问题呢?Any help really appreciated任何帮助非常感激。
【DB规范】DB规范
【DB规范】DB规范1:insert语句要列出具体的字段名称,严禁使⽤insert into tablename values (...)的⽅法,应该使⽤insert into tablename(...) values (...)⽅式,防⽌表的结果修改导致执⾏报错。
2:SQL查询中,尽量不要使⽤is null 的条件作为获取数据的条件(有其他条件的情况下可以使⽤is null 过滤结果,因为null是不会建⽴索引的,使⽤null作为查询条件⽆法使⽤索引,可以⽤其他特殊值代替null。
3:所有的外键上都必须建⽴索引,若没有对外键建⽴索引,则对⽗表delete操作或者update关联⽗表的键值操作的时候,会对⼦表产⽣全表独占锁,引发性能问题。
4:索引列上不可以使⽤函数或者表达式,优化器会进⾏全表扫描5:使⽤union all替换union对多个结果集数据做并集操作且⽆需去重时候,使⽤union all ⽽不是union ,因为union会对结果集排序,去重,占⽤⼤量的资源。
命名规范:缩写原则:1:包含四个或者四个⼀下的不必要缩写2:缩写必须唯⼀,不能⼜多义3:缩写中不能含有数字和特殊字符4:长度不能超过30单词5:缩写从右侧开始,从右到左,直达满⾜长度为⽌缩写⽅法:1:不管该单词的⾸字母是元⾳,还是辅⾳都以它作为缩写的⾸字母2:如果该单词⼜两个连续相同的辅⾳字母,则只取其⼀3:如果该单词以两个连续的元⾳字母结尾,则两个字母都保留4:然后去掉剩下的其他元⾳字母6:如果单词中出现ck这样的字母则去掉c保留K举例:单词Doorbell1:现有的单词中没有doobell 的缩写2:⾸字母需d需要保留,作为⾸字母3:两个连续的辅⾳字母l,去掉其中的⼀个4:这个单词没有连续的元⾳字母结尾5:其他的元⾳字母去掉,得到drbl6:这个单词没有ck组合所以这个单词的缩写就是drbl索引命名:idx_字段名或字段名称组合视图:vw命名。
oracle null使用详解
NULL 使用详解[轉貼]NULL 使用详解问:什么是NULL?答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零。
ORACLE允许任何一种数据类型的字段为空,除了以下两种情况:1、主键字段(primary key),2、定义时已经加了NOT NULL限制条件的字段说明:1、等价于没有任何值、是未知数。
2、 NULL与0、空字符串、空格都不同。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、 NULL的处理使用NVL函数。
5、比较时使用关键字用“is null”和“is not null”。
6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(*)中,用nvl(列名,0)处理后再查。
7、排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后。
·使用方法:· SQL> select 1 from dual where null=null;··没有查到记录·· SQL> select 1 from dual where null='';··没有查到记录·· SQL> select 1 from dual where ''='';··没有查到记录·· SQL> select 1 from dual where null is null;·· 1· ---------· 1·· SQL> select 1 from dual where nvl(null,0)=nvl(null,0);·· 1· ---------· 1··对空值做加、减、乘、除等运算操作,结果仍为空。
iotdb数据库常用语句
1. 创建数据库
sql CREATE DATABASE database_name;
2. 显示数据库
sql SHOW DATABASES;
3. 删除数据库
sql DROP DATABASE database_name;
4. 创建表
sql CREATE TABLE table_name (
field_name data_type [NOT NULL], field_name data_type [NOT NULL], ... );
5. 查看表 sql DESCRIBE table_name;
6. 删除表 sql DROP TABLE table_name;
7. 插入数据 sql INSERT INTO table_name (field_name, field_name, ...) VALUES (value, value, ...);
18. 索引
sql CREATE INDEX index_name ON table_name (field_name);
19. 触发器
sql CREATE TRIGGER trigger_name ON table_name FOR INSERT/UPDATE/DELETE AS
sql BEGIN
eld_name, ... FROM table_name WHERE condition;
9. 更新数据 sql
UPDATE table_name SET field_name = value, field_name = value, ... WHERE condition;
14. 时序查询
sql SELECT field_name, field_name, ... FROM table_name WHERE condition ALIGN(interval) FILL(value) INTERPOLATE;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DBNull用法
总结byhubupc
一:判断是否为DBNULL 的几种方式(返回多个值的情况)
1.public static bool IsDBNull(Object value)
如果value 为TypeCode..::.DBNull类型,则为true;否则为false。
2if(Object value is System.DBNull)
如果value 为TypeCode..::.DBNull类型,则为true;否则为false。
3DBNull.Value.Equals((Object value)
如果value 为TypeCode..::.DBNull类型,则为true;否则为false。
注意:
(Object value) 使用Row[“Name”]的形式,不使用的形式,否则失效。
无法将类型为“System.DBNull”的对象强制转换为类型“System.String”。
例如:
DataSet1TableAdapters.RegionTableAdapter ta = new
DataSet1TableAdapters.RegionTableAdapter();
DataSet1.RegionDataTable tb = ta.GetData();
TextBox1.Text = "fdsaf";
if (tb[4]["RegionDescription"] is System.DBNull)
// 不使用tb[4].RegionDescription is DBNull的形式
{
Response.Write("tb[4]["RegionDescription"]");
}
if (Convert.IsDBNull(tb[4]["RegionDescription"]))
{
Response.Write("tb[4]["RegionDescription"]");
}
if (DBNull.Value.Equals(tb[4]["RegionDescription"]))
{
Response.Write("tb[4]["RegionDescription"]");
}
二:使用须知
row[column] 返回的值永远不为 null ,要么就是具体的为column 的类型的值。
要么就是 DBNull 。
所以row[column].ToString() 这个写法永远不会在ToString那里发生
NullReferenceException。
DBNull 实现了 IConvertible 。
但是,除了 ToString 是正常的外,其他的ToXXX都会抛出不能转换的错误。
若是返回单个值
If(value==null)即可
DataSet1TableAdapters.RegionTableAdapter regionta=new
DataSet1TableAdapters.RegionTableAdapter();
string desc = regionta.ScalarQuery(5);
if (desc == null)
{
Response.Write("null");
}
资料:
DBNull是一个单独的类,这意味着该类只能存在一个实例。
这个唯一的实例是DBNull.Value。
DBNull 直接继承 Object ,所以 DBNull 不是 string , 不是int , 也不是 DateTime。
但是为什么 DBNull 可以表示数据库中的字符串,数字,或日期呢?原因是DotNet储存这些数据的类(DataRow等)都是以 object 的形式来储存数据的。
对于 DataRow , 它的 row[column] 返回的值永远不为 null ,要么就是具体的为column 的类型的值。
要么就是 DBNull 。
所以 row[column].ToString() 这个写法永远不会在ToString那里发生NullReferenceException。
如果为DBNull.Value,则代表SQL中的NULL
如果你要调用存储过程,里面有参数 @val nvarchar(20)="AABB" ,
那么cmd.Parameters["@val"].Value=null 代表使用这个默认的 "AABB"
而cmd.Parameters["@val"].Value=DBNull.Value 代表使用NULL来传给 @val
你可以用Convert.IsDBNull来判断一个值是否DBNull。
注意
Convert.IsDBNull(null)是false。
在数据库应用程序中,空对象是字段的有效值。
该类区分空值(空对象)和未初始化值(DBNull.Value实例)。
例如,表可以包含具有未初始化字段的记录。
默认情况下,这些未初始化字段具有DBNull .Value。
在C#中,我从DataSet中取值,准确地说应该是从DataRow的一列中取值。
当为DBNull的时候,只需要加判断if(dr[列索引] is System.DBNull)就可以了
DBNull在DotNet是单独的一个类型System.DBNull 。
它只有一个值DBNull.Value 。
DBNull直接继承Object ,所以DBNull 不是string , 不是int , 也不是DateTime 。
但是为什么DBNull 可以表示数据库中的字符串,数字,或日期呢?原因是DotNet 储存这些数据的类(DataRow等)都是以object 的形式来储存数据的。
对于DataRow , 它的row[column] 返回的值永远不为null ,要么就是具体的为column 的类型的值。
要么就是DBNull 。
所以row[column].ToString()
这个写法永远不会在ToString那里发生NullReferenceException。
DBNull 实现了IConvertible 。
但是,除了ToString 是正常的外,其他的ToXXX 都会抛出不能转换的错误。
在IDbCommand(OleDbCommand,SqlCommand...)
的ExecuteScalar的返回值中,情况可以这样分析:
select 1 这样返回的object是1
select null 这样返回的是DBNull.Value
select isnull(null,1) 返回的是1
select top 0 id from table1 这样返回的值是null
select isnull(id,0) from table1 where 1=0 返回的值是null
这里ExecuteScalar的规则就是,返回第一列,第一行的数据。
如果第一列第一行不为空,那么ExecuteScalar就直接对应的DotNet的值。
如果有第一行,但是第一列为空,那么返回的是DBNull 。
如果一行都没有,那么ExecuteScalar就返回null
规则就是这样的。
这里容易犯的一个错误是,把ExecuteScalar返回DBNull与null 的情况混淆,例如:
string username=cmd.ExecuteScalar().ToString();
除非你认为cmd执行后,肯定至少有一行数据,否则这里就会出错。
又或者select id from usertable where username=@name
这样的sql语句,如果找不到记录,那么ExecuteScalar则会返回null,所以千万不要
int userid=Convert.ToInt32(cmd.ExecuteScalar());
或者你会这样写SQL 语句:select isnull(id,0) from usertable where
username=@name
但是int userid=Convert.ToInt32(cmd.ExecuteScalar());
依然会出错,因为上面的语句不成立时,仍然是不返回任何行。
对于IDbDataParameter(OleDDbParameter,SqlParameter..)的Value,如果为null,则代表该参数没有指定,或者是代表DEFAULT。
如果为DBNull.Value,则代表SQL中的NULL
所以,如果你要调用存储过程,里面有参数@val nvarchar(20)="AABB" ,
那么cmd.Parameters["@val"].Value=null 代表使用这个默认的"AABB"
而cmd.Parameters["@val"].Value=DBNull.Value 代表使用NULL来传给
@val
你可以用Convert.IsDBNull来判断一个值是否DBNull。
注意
Convert.IsDBNull(null)是false。
备注:以上的SQL语句全是指SQLSERVER2000的。