不过 我把 数据库的 主键字段 改成 自增型的了 我的问题是解决了
没加自增型,id不会自动增加,所以id的值是空的,然而你在数据库里的设置是id不许为空,所以就有错了
遥望辽阔广远的星空,童年的心扉情不自禁敞开,与神秘的宇宙零距离对话。
没加自增型,id不会自动增加,所以id的值是空的,然而你在数据库里的设置是id不许为空,所以就有错了
3 避免使用加法运算符连接不同类型的数据
请看以下代码:
String
str = "100+100=" + 200;
Console.Writeline(str);
生成的MSIL指令为:
.maxstack 2
.locals init ([0] string str)
IL_0000: nop
IL_0001: ldstr "100+100="
IL_0006: ldc.i4 0xc8
IL_000b: box
[mscorlib]System.Int32
IL_0010: call string
[mscorlib]System.String::Concat(object,
object)
IL_0015: stloc.0
IL_0016: ldloc.0
IL_0017: call void
[mscorlib]System.Console::WriteLine(string)
IL_001c: nop
IL_001d: ret
可以清晰地看到,这两句C#代码不仅导致了String类的Concat()方法被调用(IL_0010),而且还引发了装箱操作(IL_000b)!
Concat()方法会导致CLR为新字串分配内存空间,而装箱操作不仅要分配内存,还需要创建一个匿名对象,对象创建之后还必须有一个数据复制的过程,代价不菲!
改为以下代码:
String str = "100+100=";
Console.Write(str);
Console.WriteLine(200);
生成的MSIL指令为:
.maxstack 1
.locals init ([0] string str)
IL_0000: nop
IL_0001: ldstr "100+100="
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: call void
[mscorlib]System.Console::Write(string)
IL_000d: nop
IL_000e: ldc.i4 0xc8
IL_0013: call void
[mscorlib]System.Console::WriteLine(int32)
IL_0018: nop
IL_0019: ret