SQLite C#查询不起作用

时间:2013-02-20 08:50:43

标签: c# sql sqlite nvarchar

我在执行从C#到SQLite DB的查询时遇到问题,我使用以下查询,它给出了错误:“max”。

create table ClockMessages (ID int identity(1, 1) primary key, InsertDateTime DateTime not null, SendDateTime DateTime, Data nvarchar(max));

我不能使用nvarchar格式,我应该使用TEXT吗?

4 个答案:

答案 0 :(得分:1)

使用TEXT

根据手册,

TEXT - 该值是一个文本字符串,使用数据库编码(UTF-8,UTF-16BE或UTF-16LE)存储。

答案 1 :(得分:1)

声明varchar类型时,

SQLite 不使用大小。

来自 FAQ

  

(9)SQLite中VARCHAR的最大大小是多少?

     

SQLite 不会强制使用VARCHAR的长度。你可以声明一个    VARCHAR(10),SQLite很乐意让你输入500个字符   它。并且它将保持所有500个字符完整 - 它永远不会截断

您可以使用TEXT类型代替。查看 here

  

TEXT。该值是使用数据库编码存储的文本字符串   (UTF-8,UTF-16BE或UTF-16LE)。

答案 2 :(得分:1)

SQLite中只有5种数据类型。

当你使用其中一些

CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB

在create table语句中,SQLite将其转换为Text

  

请注意类型后面的括号中的数字参数   SQLite忽略了name(例如:“VARCHAR(255)”) - SQLite没有   施加任何长度限制(除了大的全球   SQLITE_MAX_LENGTH limit)对字符串,BLOB或数字的长度   值。

SQLite data types

答案 3 :(得分:0)

使用TEXT! 您可以阅读here有关sqlite数据类型的更多信息

TEXT =>该值是一个文本字符串,使用数据库编码(UTF-8,UTF-16BE或UTF-16LE)存储。

  

SQLite使用更通用的动态类型系统。在SQLite中   值的数据类型与值本身相关联,而不是与其相关联   容器。 SQLite的动态类型系统是向后兼容的   与其他数据库引擎的更常见的静态类型系统   在静态类型数据库上工作的SQL语句的意义   应该在SQLite中以相同的方式工作。但是,动态输入   SQLite允许它做传统中不可能的事情   严格类型化的数据库。

注意到:

  

SQLite不会施加任何长度限制(除了大的   全局SQLITE_MAX_LENGTH限制)关于字符串,BLOB或的长度   数值。

<强>最后:

字符串或BLOB的最大长度

  

定义字符串中的最大字节数或SQLite中的BLOB   由预处理器宏SQLITE_MAX_LENGTH。默认值   宏观是10亿(10亿或1,000,000,000)。您可以   使用命令行选项在编译时提高或降低此值   像这样:

     

-DSQLITE_MAX_LENGTH = 123456789目前的实施只会   支持字符串或BLOB长度最大为231-1或2147483647.还有一些   在此之前,内置函数(如hex())可能会失败。在   安全敏感的应用程序最好不要尝试增加   最大字符串和blob长度。事实上,你可能会做得更好   最大字符串和blob长度到a的范围内   如果可能的话,几百万。

     

在SQLite的INSERT和SELECT处理过程中,完成了   数据库中每行的内容被编码为单个BLOB。所以   SQLITE_MAX_LENGTH参数也决定了最大数量   连续的字节。

     

使用时可以在运行时降低最大字符串或BLOB长度   sqlite3_limit(db,SQLITE_LIMIT_LENGTH,size)接口。