标题:myCommand这样用为什么不行 ?
只看楼主
EdwardLyons
Rank: 1
等 级:新手上路
帖 子:254
专家分:0
注 册:2006-12-8
得分:0 
以下是引用share2227在2006-12-15 11:39:37的发言:
不过 我把 数据库的 主键字段 改成 自增型的了  我的问题是解决了

没加自增型,id不会自动增加,所以id的值是空的,然而你在数据库里的设置是id不许为空,所以就有错了


遥望辽阔广远的星空,童年的心扉情不自禁敞开,与神秘的宇宙零距离对话。
2006-12-15 11:57
share2227
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2006-12-6
得分:0 
string insertStr = "insert into borrowinfo values ('" + Session["id"] + "','" + Request["bookname"] + "',getdate(),getdate())";

Session 这样用不对吗


EdwardLyons SQL 是没有自增型 把int 下面的一个标识 改成 “是” 别人说的
2006-12-15 13:54
EdwardLyons
Rank: 1
等 级:新手上路
帖 子:254
专家分:0
注 册:2006-12-8
得分:0 
'" + Session["id"] + "'
在SQL Server里这样的事情千万别做,因为你根本不确定下一个id是什么,这个交给数据库来做就可以了
要想自增,标识 改成 “是”就可以了

遥望辽阔广远的星空,童年的心扉情不自禁敞开,与神秘的宇宙零距离对话。
2006-12-15 14:30
yj82112
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-7-14
得分:0 
请问1楼是不是想string borrowStr = "select count(*) from borrowinfo ";根据这条语句查到的数加1后做为id再插入呀?
这个方法 myCommand1.ExecuteNonQuery();返回的是受影响的行数,而且你也没有将返回的值负给borrowStr呀,
borrowStr= borrowStr + 1;又是想得到什么?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

可以看到,虽然多了一次方法调用(Console.Write)方法,但却避免了复杂的装箱操作,也避免了调用String.Concat()方法对内存的频繁分配操作,性能更好。
(详细见http://blog.csdn.net/bitfan/archive/2006/12/13/1441952.aspx)

字符串borrowStr = "select count(*) from borrowinfo "加上数字是得不到你想要的结果的
2006-12-15 15:19
share2227
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2006-12-6
得分:0 
yj82112 14楼的 你说的对啊 我就是想+1的意思 那你说 “有将返回的值负给borrowStr呀,”

那我应该怎么做啊

你下面的那些东西 我不懂 我是初学者 谢谢你的答复

13楼的 EdwardLyons 自增的 字段我已经改了 可是现在还是需要一个

string insertStr = "insert into borrowinfo values ('" + Session["id"] + "','" + Request["bookname"] + "',getdate(),getdate())";

要插入登陆人的ID 啊
2006-12-15 18:16
EdwardLyons
Rank: 1
等 级:新手上路
帖 子:254
专家分:0
注 册:2006-12-8
得分:0 
我请问楼主,你用的是什么数据库?如果是SQLServer有什么必要一定要返回一个id??
你要那个id做什么?那个id数据库自己就能自动插入,你做了也是错,你做了本来应该由计算机完成的事情,如果你真的那么牛,还要计算机做什么?你自己背下来不就可以了吗。
再有select count(*) from borrowinfo ,这个只能找到一个总和,但是这个总和并不意味着就是你要的那个id,因为一旦数据库表中有一条记录被删除,那你的逻辑就错了,懂了吗??

遥望辽阔广远的星空,童年的心扉情不自禁敞开,与神秘的宇宙零距离对话。
2006-12-15 18:49
share2227
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2006-12-6
得分:0 
select count(*) from borrowinfo 和 Session["id"]
不是一个字段
前者 就是要 搜索他的 总数 然后加一 后来我把数据库该成 自增型的了 那个问题解决了
第二个 是我新在数据库里加的字段 就是要插入 登陆人的ID
2006-12-16 12:15
kyoshingo
Rank: 1
等 级:新手上路
帖 子:88
专家分:0
注 册:2006-3-18
得分:0 
borrowStr=Convert.ToString(myCommand1.ExecuteScalar());//这样可以,把取出的值赋给borrowStr;


string userid=(string)Session["id"];

叶子的离去,不是因为风的招唤,而是树的舍弃
2006-12-16 12:52
virusswb
Rank: 1
等 级:新手上路
威 望:1
帖 子:342
专家分:0
注 册:2005-8-6
得分:0 
string connStr1 = "server=localhost;uid=sa; pwd=sa; database=book";
SqlConnection myConnection1 = new SqlConnection(connStr1);
string borrowStr = "select count(*) from borrowinfo ";


SqlCommand myCommand1 = new SqlCommand(borrowStr, myConnection1);
myConnection1.Open();
myCommand1.ExecuteNonQuery();
myConnection1.Close();
borrowStr= borrowStr + 1;
是不是这句的borrowStr出错了,应该是myCommand1.ExecuteScalar();

jorden008@
2006-12-16 18:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-109589-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.218379 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved