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命令文本发送到数据库时,是否存在查看该命令文本的方法?
以下是我试图插入的类型:
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。谢谢!
发布于 2011-02-28 16:28:38
我猜您在查询中没有@dateTimeParam的引号,并且查询解析器假设它是一个int。
真正困扰我的是为什么你用引号环绕参数。
试试这个:
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。这个有用吗?
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();发布于 2013-07-19 18:53:14
我的问题是由于使用了参数数据类型: System.Data.DbType.DateTime2和.NET Sqlite不识别此枚举。
https://stackoverflow.com/questions/5144569
复制相似问题