日期:2014-05-18  浏览次数:20632 次

用sqlite C#数据存放的问题
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
 
namespace ConsoleApplication4
{
  class Program
  {
  static void Main(string[] args)
  {
   
  DbProviderFactory factory = SQLiteFactory.Instance;
  using (DbConnection conn = factory.CreateConnection())
  {
  conn.ConnectionString = "Data Source=d:/data.db";
  conn.Open();
  string sql = "Create Table test(S int32,D int32,P int32,K int32,X int32,Y int32,Z int32,Q int32,F int32)";
  DbCommand cmd = conn.CreateCommand();
  cmd.Connection = conn;
  cmd.CommandText = sql;
  cmd.ExecuteNonQuery();
  //cmd.Parameters.Add(cmd.CreateParameter());
   
   
  DbTransaction trans = conn.BeginTransaction();
   
  for (int c = 1; c <= 100000; c++)
  {
   
  cmd.CommandText = "insert into test (S,D,P,K,X,Y,Z,Q,F) values(34,53,53,76,24,24,64,4,8)";
  //cmd.Parameters[0].Value = c;
   
  cmd.ExecuteNonQuery();
  }
  trans.Commit();
  int i = sizeof(Int);
  Console.WriteLine(i);
  Console.ReadLine();
  }

  }
  }
}
  数据是int型的,占4字节,也就是说文件应该大于9列*100000行*4字节,结果不是,老师说有错,我想问错在哪?没错的话,理由是什么?


------解决方案--------------------
参考SQLite文件格式:http://www.sqlite.org/fileformat2.html

SQLite当前的版本3支持的数据类型有5种:
1.NULL:空值。
2.INTEGER:有符号整数,根据情况用1、2、3、4、6或8个字节存储。
3.REAL:浮点数。
4.TEXT:文本,用字符集UTF-8、UTF-16BE 或 UTF-16LE存储,视数据库编码格式而定。
5.BLOB:二进制字节序列,一般存放不易用数值或文本表示的对象,但理论上可以存放任何东西。

个人推测:整数只支持一种INTEGER,不一定是4个字节存储。你把插入的整数换大些,比如5千万多,再看看文件的大小。