从钱龙数据中读取股票代码信息导入到数据库

本文介绍了一种将钱龙软件中的股票数据导入MSSqlServer2005数据库的方法,适用于股票程序开发者。通过解析钱龙软件提供的股票代码文件(stockinfo.sha和stockinfo.szn),实现了自动化数据迁移。
摘要由CSDN通过智能技术生成
写股票相关的程序最苦恼的事莫过于没有数据了, 于是参考了网上其他朋友的一些文章,写了一个程序,可以把钱龙里的一些数据导入到数据库,以便进一步使用.

在我的例子里使用的是MS SqlServer 2005, 如果要使用其他数据库,可能某些地方要做一定的修改.

钱龙软件的股票代码按照市场不同保存在两个文件: stockinfo.sha和stockinfo.szn, 分别代表上海和深圳.

下面是我的程序的核心代码:
None.gif          private   static   void  ReadStockCodes( string  strPath,  string  p_strMarket)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            FileStream stream 
= new FileStream(strPath, FileMode.Open, FileAccess.Read);
InBlock.gif            BinaryReader b_reader 
= new BinaryReader(stream);
InBlock.gif            SqlCommand cmd 
= new SqlCommand("", m_conn);
InBlock.gif            cmd.Transaction 
= m_tran;
InBlock.gif            cmd.CommandText 
= "insert into stockinfos ([StockCode] ,[Market] ,[StockName], [IsIndex]) " +
InBlock.gif                
"VALUES (@StockCode,@Market,@StockName, @IsIndex)";
InBlock.gif            cmd.Parameters.Add(
"@StockCode", SqlDbType.NChar, 6);
InBlock.gif            cmd.Parameters.Add(
"@Market", SqlDbType.NVarChar, 10);
InBlock.gif            cmd.Parameters.Add(
"@StockName", SqlDbType.NVarChar, 20);
InBlock.gif            cmd.Parameters.Add(
"@IsIndex", SqlDbType.Bit);
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
while (stream.CanRead)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
int nIndex = b_reader.ReadInt32();
InBlock.gif                    
string strCode = GetString(b_reader, 7);
InBlock.gif                    
int nCnt = 0;
InBlock.gif                    List
<Byte> endbytes = new List<byte>();
InBlock.gif                    endbytes.Add(
0);
InBlock.gif                    
string strName = GetStringTillEnd(b_reader,endbytes, out nCnt);
InBlock.gif                    strCode 
= strCode.Replace('\0'' ');
InBlock.gif                    strName 
= strName.Replace('\0'' ');
InBlock.gif                    strCode 
= strCode.Trim();
InBlock.gif                    strName 
= strName.Trim();
InBlock.gif                    
int n = 0x119;
InBlock.gif                    n 
-= 4 + 7;
InBlock.gif                    n 
-= nCnt;
InBlock.gif                    cmd.Parameters[
0].Value = strCode;
InBlock.gif                    cmd.Parameters[
1].Value = p_strMarket;
InBlock.gif                    cmd.Parameters[
2].Value = strName;
InBlock.gif                    
int nIsIndex=0;
InBlock.gif                    
InBlock.gif                    
if ((p_strMarket == "SH" && ( strCode.StartsWith("000"|| strCode.StartsWith("801"))
InBlock.gif                        
|| 
InBlock.gif                        (p_strMarket 
== "SZ" && ( strCode.StartsWith("399")))
InBlock.gif                        
||
InBlock.gif                        strName.Contains(
"指数")))
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        nIsIndex 
= 1;
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    cmd.Parameters[
3].Value = nIsIndex;
InBlock.gif                    cmd.ExecuteNonQuery();
InBlock.gif                    Console.WriteLine(
"Index={0}, Code={1}, Name={2}, {3}", nIndex, strCode, strName, 
InBlock.gif                        nIsIndex
==1 ? "指数" : "证券");
InBlock.gif                    b_reader.ReadBytes(n);
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (EndOfStreamException)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (Exception ex)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif
InBlock.gif                Console.WriteLine(ex.Message);
InBlock.gif                
throw;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

其中用到的两个读入字符串的方法为:
None.gif          public   static   string  GetString(BinaryReader m_reader,  int  p_nLength)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            Encoding mbcs 
= Encoding.GetEncoding(936);
InBlock.gif            Encoding unicode 
= Encoding.Unicode;
InBlock.gif
InBlock.gif            
byte[] byteBuffer = m_reader.ReadBytes(p_nLength);
InBlock.gif            
byte[] unicodBytes = Encoding.Convert(mbcs, unicode, byteBuffer);
InBlock.gif            
char[] buffer;// = new char[unicode.GetCharCount(unicodBytes)];
InBlock.gif
            buffer = unicode.GetChars(unicodBytes);
InBlock.gif            
// char[] buffer = m_reader.ReadChars(p_nLength);
InBlock.gif
            string str = new string(buffer);
InBlock.gif            str 
= str.Replace('\x3''\x20');
InBlock.gif            
return str.Trim();
ExpandedBlockEnd.gif        }

None.gif        
public   static   string  GetStringTillEnd(BinaryReader m_reader, List < byte >  p_endchars,  out   int  p_nLength)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            Encoding mbcs 
= Encoding.GetEncoding(936);
InBlock.gif            Encoding unicode 
= Encoding.Unicode;
InBlock.gif            p_nLength 
= 0;
InBlock.gif            
byte[] byteBuffer_0 = new byte[1024];
InBlock.gif            
byte b;
InBlock.gif            
do
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                b 
= m_reader.ReadByte();
InBlock.gif                p_nLength
++;
InBlock.gif                byteBuffer_0[p_nLength 
- 1= b;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
while (!p_endchars.Contains(b));
InBlock.gif
InBlock.gif            
//byteBuffer = m_reader.ReadBytes(p_nLength);
InBlock.gif
            byte[] byteBuffer= new byte[p_nLength];
InBlock.gif            
for (int i = 0; i < p_nLength; i++) byteBuffer[i] = byteBuffer_0[i];
InBlock.gif
InBlock.gif            
byte[] unicodBytes = Encoding.Convert(mbcs, unicode, byteBuffer);
InBlock.gif            
char[] buffer;// = new char[unicode.GetCharCount(unicodBytes)];
InBlock.gif
            buffer = unicode.GetChars(unicodBytes);
InBlock.gif            
// char[] buffer = m_reader.ReadChars(p_nLength);
InBlock.gif
            string str = new string(buffer);
InBlock.gif            str 
= str.Replace('\x3''\x20');
InBlock.gif            
return str.Trim();
ExpandedBlockEnd.gif        }

None.gif

因为程序很简单, 其他不重要的部分我就不放上来了.

转载于:https://www.cnblogs.com/sliencer/archive/2007/03/26/688605.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值