求助高手:如何在Asp.Net中读取文本文件到数据库

newdelphiboy 2006-02-17 09:35:38
需求如下:
有一具有相同固定格式的文本文件,一行就是一条数据.请问如何在Asp.Net中将这个文本文件读取进数据库?

我现在的思路是:先将定义一个结构类型变量,结构类型中的每个字段与数据表字段的结构一致.
然后将文本文件读进ReadStream,再对ReadStream的每一行按表结构进行字符串截取存入到结构变量对应的字段中.
然后保存到数据库.

现在想问的问题是:1:该方法是否可行?
2:有没有更好的方法来实现?因为我担心一行一行的读取和保存,效率不高.
3:在Asp.net中,用户登录成功后,哪种方法来保存用户的信息(比如:用户名,用户类型,用户电话....)效率比较高?
...全文
549 18 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
newdelphiboy 2006-02-23
  • 打赏
  • 举报
回复
stpangpang(胖在一方),有興趣再到這兒來接分。同樣的問題 http://community.csdn.net/Expert/topic/4569/4569196.xml?temp=.1342432
newdelphiboy 2006-02-23
  • 打赏
  • 举报
回复
問題解決了,感謝stpangpang(胖在一方)給的思路,同時也感謝其他熱心網友
stpangpang 2006-02-21
  • 打赏
  • 举报
回复
"还是无法正确的将文本文件读入数据库呀?"
是乱玛还是不能显示汉字? 我今天刚把我的模块搞定 就是从client 端取txt文件,分析后将里面的数据写入到数据库中。

你把你的代码贴出来看看~

我的哪个只是判断上中文,还是e文,没有其他的目的~,不知道你的要求是什么~
stpangpang 2006-02-21
  • 打赏
  • 举报
回复
你可以这样用一个变通的方法实现你的功能

因为“一行就对应于数据库中的一条记录。在文本文件中的每一行文本都是连续的,中间没有任何的特殊的符号来区分不同的字段”

你可以把你的汉字都替换成这样的形式
“1223sdg这是wetwe测试” = > "1223sdg这 是 wetwe测 试 "
就是把每个汉字后面都加一个空格“ ” (在你readstream中读每一行的时候,进行替换)
============
替换代码
Dim str As String = "abc这是web测试"
Dim a As String
a = Regex.Replace(str, "([\u4e00-\u9fa5])", "$1 ") '后面有一个空格 "$1 "
'此时 a 的值为 "abc这 是 web测 试 "
============
然后就按照你的规则,e文是一个字符,汉字是2个字符用substring 函数截取,当你写入数据库的时候,你再用写入的字符的空格全部替换掉。

粗略的试了一下,感觉可行的。你再测试一下看看,
如果你的文件中允许有空格的话,你可以把空格换成一个特殊的字符,嘿嘿,

我没有想到其他的好方法
newdelphiboy 2006-02-21
  • 打赏
  • 举报
回复
stpangpang(胖在一方):
需求:有一具有相同固定格式的文本文件,一行就对应于数据库中的一条记录。在文本文件中的每一行文本都是连续的,中间没有任何的特殊的符号来区分不同的字段。文本中有英文字母和数字,也可能有中文汉字。在文本格式的规定中,一个英文字母或数字对应的长度为1,中文汉字对应的长度为2.
字符串的格式如下:1223sdg这是wetwe测试

数据库中数据结构是固定的,每个字段都有明确的长度。

我现在的思路是:先将定义一个结构类型变量,结构类型中的每个字段与数据表字段的结构一致.
然后将文本文件读进ReadStream,再对ReadStream的每一行按表结构进行字符串截取(用SubString()函数),存入到结构变量对应的字段中,然后保存到数据库.

现在遇到的问题是:按照数据库表的字段长度进行字符串截取,而在C#中,用gb2312编码格式取得的字符串长度与我想要的字段长度不一致。原因如下,在C#中,每个汉字取出来的长度也是1,
而不是如文本文件中规定的那样,汉字长度为2.这样,在用SubString()函数时,无法传入要截取的正确lengh.
stpangpang 2006-02-20
  • 打赏
  • 举报
回复
你不必考虑用session存有什么性能问题,只有一些用户的信息,够不成什么性能的下降。而且你的程序是跑在服务器上,不是普通的pc,性能不是最先考虑的东西,而是你的操作性,开发速度,开发成本等...我是这么考虑的~更何况session只是保存一些用户的信息而已。

汉字是2个字节,e文是一个字节 ,所以你直接用length比较,会不正确

可以用以下的方法判断,是否是汉字或者是e文
If System.Text.RegularExpressions.Regex.IsMatch(string, "[\u4e00-\u9fa5]") Then
length += 2
Else
length += 1
End If

newdelphiboy 2006-02-20
  • 打赏
  • 举报
回复
楼上stpangpang(胖在一方),你这样的方法如果可行,那是可以取得长度.但问题是,如果按这样的取法,我还是无法正确的将文本文件读入数据库呀?
请问有没解决读文本文件保存数据库的方法?
家鸣 2006-02-19
  • 打赏
  • 举报
回复
从文件中读入一行,然后生成相应的SQL插入语句,插入数据库。没必要生成结构体或类了。
newdelphiboy 2006-02-19
  • 打赏
  • 举报
回复
為什麼我取出來的每一行的長度與實際的長度不對呀?
實際長度的計算思路是:每一字符是一位,如果是漢字的話,就是兩位。
但C#中將一行讀入到一個字符串中後,將這個字符串的長度時,卻與上面計算的實際長度不對?請問是怎麼回事?
WeekZero 2006-02-19
  • 打赏
  • 举报
回复
3:在Asp.net中,用户登录成功后,哪种方法来保存用户的信息(比如:用户名,用户类型,用户电话....)效率比较高?

如果数据的保密性要求不是很高的话可以考虑写到session或者cookie中,当然保存到这里面前可以考虑个加密的
newdelphiboy 2006-02-18
  • 打赏
  • 举报
回复
请注意,是在Asp.Net程序中读取文本文件呀.
newdelphiboy 2006-02-18
  • 打赏
  • 举报
回复
我担心如果用Session,性能会不会不高?有没有更好的办法呢?
newdelphiboy 2006-02-18
  • 打赏
  • 举报
回复
singlepine(小山)的作法是直接操作数据库的呀
jxufewbt 2006-02-18
  • 打赏
  • 举报
回复
singlepine(小山) 正解
杨哥儿 2006-02-18
  • 打赏
  • 举报
回复
用XML,或者ACCESS
stpangpang 2006-02-18
  • 打赏
  • 举报
回复
我认为,还是将文本读取到服务器段,写入到数据库中,
毕竟bs上用1楼的方法 限制太多,
我目前一个项目就是采用这样的方法。

登陆后,你可以建立一个 用户的class,保存在session中,
dai2003 2006-02-17
  • 打赏
  • 举报
回复
同意一樓的做法
singlepine 2006-02-17
  • 打赏
  • 举报
回复
参考
http://singlepine.cnblogs.com/articles/264172.html
里面的文本文件的导入导出,看是否适合你的格式


-- 导入文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword'

--导出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword'
--或
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'

--导出到TXT文本,用逗号分开
exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password'
相关推荐
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2006-02-17 09:35
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。