首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlite提供错误-无效的强制转换异常-“从'DateTime‘到’Int32 32‘的无效强制转换。”

Sqlite提供错误-无效的强制转换异常-“从'DateTime‘到’Int32 32‘的无效强制转换。”
EN

Stack Overflow用户
提问于 2011-02-28 16:20:47
回答 2查看 4.2K关注 0票数 4
代码语言:javascript
复制
var idParam = new SQLiteParameter("@idParam", SqlDbType.Text) { Value = insertData.ID };
var userIdParam = new SQLiteParameter("@userIdParam", SqlDbType.VarChar) { Value = insertData.Uid };
var applicationNameParam = new SQLiteParameter("@applicationNameParam", SqlDbType.VarChar) { Value = insertData.Application };
var eventNameParam = new SQLiteParameter("@eventNameParam", SqlDbType.VarChar) { Value = insertData.EventName };
var clientTokenParam = new SQLiteParameter("@clientTokenParam", SqlDbType.VarChar) { Value = insertData.ClientToken };
var versionParam = new SQLiteParameter("@versionParam", SqlDbType.VarChar) { Value = insertData.Version };
var dateTimeParam = new SQLiteParameter("@dateTimeParam", SqlDbType.DateTime) { Value = insertData.DateTime };
var dataParam = new SQLiteParameter("@dataParam", SqlDbType.Text) { Value = insertData.Data };

SQLiteCommand command = new SQLiteCommand("INSERT INTO DATAOUT (id, uid, application, eventname, clienttoken, version, datetime, data)" +
    " VALUES ('@idParam','@userIdParam','@applicationNameParam','@eventNameParam','@clientTokenParam','@versionParam',@dateTimeParam,'@dataParam')",Connection);
command.Parameters.Add(idParam);
command.Parameters.Add(userIdParam);
command.Parameters.Add(applicationNameParam);
command.Parameters.Add(eventNameParam);
command.Parameters.Add(clientTokenParam);
command.Parameters.Add(versionParam);
command.Parameters.Add(dateTimeParam);
command.Parameters.Add(dataParam);

command.ExecuteNonQuery();

我正在尝试调试这个插入,但是我没有多少运气。为什么sqllite试图把我的约会时间浪费在int上??数据库架构需要一个datetime对象。在将insert命令文本发送到数据库时,是否存在查看该命令文本的方法?

以下是我试图插入的类型:

代码语言:javascript
复制
public string Uid { get; private set; }
public string Application { get; private set; }
public string EventName { get; private set; }
public string ClientToken { get; private set; }
public string Version { get; private set; }
public DateTime DateTime { get; private set; }
public string Data { get; private set; }

以下是插入的示例:

插入DATAOUT (id、uid、应用程序、事件名称、客户端标记、版本、日期时间、数据)值(‘00000000-0000-0000-0000-0000-000000000000’,‘123 Attic’,‘我的应用程序’,'‘我的应用程序’,‘’测试客户端‘,'1.0.0','1/1/2000','{"id":"alpha_123",“问题”:“在前古典时代或非Attic方言中的发音”。对于det,“回答”:“发音"},{"id":"beta_456",”问题“:”法律之类的官方文件“,”答案“:”或修饰语“},{"id":"gamma_789",”问题“:”保持或修改以适应希腊音系;因此,“?”、“答案”:“Attic"} }、{"id":"delta_098”、“问句”:“在第五期末,回答”、“回答”:“退出”}、{"id":"epsilon_076“、”问题“:”令人感兴趣的文体变体,其下降的尾巴要么直下o",要么“答案”:“整束"},{id”:“zeta_054”,“问题”:“当一个词开始时,呼吸很粗糙。”另一种使用“,”回答:“其他迪亚”}‘)

最后一个值是一个JSON字符串。dateTime字段显然是问题所在(第7段)。对于上面的例子,我刚刚添加了文本'1/1/2011‘。代码通过参数构造插入。datetime参数在调试器中有一个有效日期。

当我检查参数"dateTimeParam“时,调试器显示dbType = Int32。这是怎么回事?

更新

删除insert语句中参数周围的引号。它的结果是插入字符串字面值@paramname。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-28 16:28:38

我猜您在查询中没有@dateTimeParam的引号,并且查询解析器假设它是一个int

真正困扰我的是为什么你用引号环绕参数。

试试这个:

代码语言:javascript
复制
var command = new SQLiteCommand (
   "INSERT INTO DATAOUT (id, uid, application, eventname, clienttoken, version, datetime, data)" +
    " VALUES (@idParam, @userIdParam, @applicationNameParam, @eventNameParam, @clientTokenParam, @versionParam, @dateTimeParam, @dataParam)",
    Connection);

更新

我不知道是什么引起了这个问题。我试着模仿this code。这个有用吗?

代码语言:javascript
复制
var command = new SQLiteCommand (
    "INSERT INTO DATAOUT (id, uid, application, eventname, clienttoken, version, datetime, data)" +
    " VALUES (@idParam,@userIdParam,@applicationNameParam,@eventNameParam,@clientTokenParam,@versionParam,@dateTimeParam,@dataParam)",
    Connection);

command.Parameters.AddWithValue("@idParam", insertData.ID);
command.Parameters.AddWithValue("@userIdParam", insertData.Uid);
command.Parameters.AddWithValue("@applicationNameParam", insertData.Application);
command.Parameters.AddWithValue("@eventNameParam", insertData.EventName);
command.Parameters.AddWithValue("@clientTokenParam", insertData.ClientToken);
command.Parameters.AddWithValue("@versionParam", insertData.Version);
command.Parameters.AddWithValue("@dateTimeParam", insertData.DateTime);
command.Parameters.AddWithValue("@dataParam", insertData.Data);

command.ExecuteNonQuery();
票数 3
EN

Stack Overflow用户

发布于 2013-07-19 18:53:14

我的问题是由于使用了参数数据类型: System.Data.DbType.DateTime2和.NET Sqlite不识别此枚举。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5144569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档