插入数据库, 记录的顺序怎么总是不对啊?

gamexy 2007-07-11 09:07:52
下面这段程序,是读取文件中的每一行,然后顺次插入到数据库中,有这么几个问题:
1.插入后记录的顺序总是不对,虽然我肯定是顺次读取并插入的。
2.Transaction到底要不要commit啊,为什么我没有commit,对结果没什么影响?

Computer mycomputer = new Computer();
using (StreamReader myReader = mycomputer.FileSystem.OpenTextFileReader(data_file.FullName, Encoding.Default))
{

using (OracleConnection myOracleConnection = new OracleConnection(mySetting.ConnectionString))
{
myOracleConnection.Open();

while (myReader.Peek() != -1)
{
info = myReader.ReadLine();
unitname = info.Substring(25, 8);




#region insert
//OracleTransaction insert_transaction = null;
//insert_transaction = myOracleConnection.BeginTransaction(IsolationLevel.Serializable);
//insert_transaction = myOracleConnection.BeginTransaction();

try
{
string @insert_string = "insert into tbdl02 (ser,datatype,result,data,cjrq,cjsj)"
+ "values (:ser,' ',0,:data,:cjrq,:cjsj)";

OracleCommand insert = new OracleCommand(insert_string, myOracleConnection);
insert.Parameters.Add("ser", OracleType.Char).Value = DateTime.Now.ToString("yyyyMMddHHmmssffff") + "." + count.ToString() + (rnd).Next(5000).ToString();
seed++;
insert.Parameters.Add("data", OracleType.Char).Value = info;
insert.Parameters.Add("cjrq", OracleType.Char).Value = DateTime.Now.ToString("yyyyMMdd");
insert.Parameters.Add("cjsj", OracleType.Char).Value = DateTime.Now.ToString("HHmmss");

//insert.Transaction = insert_transaction;
insert.ExecuteNonQuery();
//insert_transaction.Commit();

}
catch
{
//insert_transaction.Rollback();
}
#endregion insert
}
}
}
...全文
1107 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
北京的雾霾天 2007-07-12
  • 打赏
  • 举报
回复
插入数据向数据库中,可能自然顺序会和插入的时候不一样,这个和数据类型或是否建立索引有关,如果要保持和插入的顺序一样,那么最好加一个排序的字段然后使用Order by来排序取记录.

事务最好可以不使用Commit,但是这个比较危险,如果数据驱动对象不支持这个默认的操作完后提交,那么可能会自动的放弃所有操作,使用Commit后可以明确的使所有操作一次提交到数据库中.并且最好明确的来调用这个Commit.
gamexy 2007-07-12
  • 打赏
  • 举报
回复
ls真乃高手也。
》》》数据类型或是否建立索引有关
我设定的是varchar2,也对这个字段建立了索引。怎么还是顺序不对?
我自己读取到好办,按照这个字段排序,但是我的表中的内容,是提供给另一个程序(别人写好的,所谓的中间件),它按照记录顺序一条条读取。
如果我想要记录顺序按照我的指定重新排序,有没有办法呢?
Jinglecat 2007-07-12
  • 打赏
  • 举报
回复
1.插入后记录的顺序总是不对,虽然我肯定是顺次读取并插入的。
======
怎么个不对法哦?


2.Transaction到底要不要commit啊,为什么我没有commit,对结果没什么影响?
==========
当然要 commit

只是你每个循环,开始了一个事务,那这次 Comand 有什么关联? 跟没有显示开始事务有什么区别?

将 Transaction 与 Command 的声明放在 while 外面

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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