两个新手问题,请高手赐教

leonhome 2006-12-02 10:43:08
1.定义了一个Product表,该表中的记录有一个State属性,利用该属性的不同值判断Product的状态。该表中存储的数据量比较大,两种不同状态记录数基本相同。我需要在C#中使用这个数据库,请问直接执行
SqlCommand sqlComm=...
string strSQL="Select * From Product Where State=State1 And Product_Id=xxx"
sqlComm.ExecuteNonQuery(strSQL)
和将这两种状态拆成ProductState1和ProductState2两个各自保存不同状态的记录的表,然后执行
if (sTableName=="ProductState1")
strSQL="Select * From Product Where Product_Id=xxx"
else if (sTableName=="ProductState2")
strSQL="Select * From Product Where Product_Id=xxx"
sqlComm.ExecuteNonQuery(strSQL)
这两种方法那个更好一些?(主要是效率、可靠性和安全性三个方面)
2.在B/S结构应用程序中,下面的事务是否安全?
事务T1开始
向表1添加一条记录(Insert 表1 Values ...)
取得刚刚添加记录的主键ID1(Select ...)
向表2添加一条记录(Insert 表2...)
取得刚刚添加记录的主键ID2(Select...)
将ID1,ID2添加进表3(Insert 表3..)
Commit事务
如果出错RollBack事务~~
请问在B/S结构的应用程序中事务T1安全吗?

...全文
168 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
laoliu666 2006-12-03
  • 打赏
  • 举报
回复
建议也是使用第一种方法,
scckobe 2006-12-03
  • 打赏
  • 举报
回复
第一个问题:
1.个人建议也是使用第一种方法,你想提高效率的话可以建立在Product_Id上建立索引.
2.安全性方面:在你的sql语句上,你最好不要用你写的语句,通过传参是最安全的.
第二个问题:
1.这个事务很安全,你可以直接这样用.
sgucxc0 2006-12-03
  • 打赏
  • 举报
回复
一.string strSQL="Select * From Product Where State=State1 And Product_Id=xxx"
sqlComm.ExecuteNonQuery(strSQL)

1.C#中的ExecuteNonQuery()方法对 "select"是无效的.

Execute Non Query 拆出来就是执行没有查询的语句.当然不包括select出来的数据.

2.第二种方法好.不过不是那样写的.还有要事先判断.

二.不安全.使用时要先对Tabel.Lock进行锁定.




marco08 2006-12-02
  • 打赏
  • 举报
回复
两个表查询、维护起来不方便啊
leonhome 2006-12-02
  • 打赏
  • 举报
回复
To:marco08(天道酬勤)
为什么呢?请问第一种方法好在哪里?
leonhome 2006-12-02
  • 打赏
  • 举报
回复
第二个问题补充一点
表1,表2的主键是SqlServer自动生成的,初始值为10000,增值为1
marco08 2006-12-02
  • 打赏
  • 举报
回复
--建议使用第一种方法
SqlCommand sqlComm=...
string strSQL="Select * From Product Where State=State1 And Product_Id=xxx"
sqlComm.ExecuteNonQuery(strSQL)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧