我正在尝试针对Sqlite数据库实现数据访问层。我的一张表包含一个datetime字段。
将数据插入此datetime字段时遇到问题。
cmd.CommandText = string.Format(
"INSERT INTO Orders(" +
"OrderId, " +
"Status, " +
"CreationTime, " +
"LastModification, " +
"CreatorName) " +
"VALUES(@orderId,@status,@creation,@modification,@creator)";
cmd.Parameters.AddWithValue("@orderId", orderId);
cmd.Parameters.AddWithValue("@status", status);
cmd.Parameters.AddWithValue("@creation", creationTime);
cmd.Parameters.AddWithValue("@modification", lastModificationTime);
cmd.Parameters.AddWithValue("@creator", creatorName);
我的表创建:
cmd.CommandText = "CREATE TABLE IF NOT EXISTS Orders(" +
"OrderId TEXT PRIMARY KEY NOT NULL, " +
"Status TEXT, " +
"CreationTime DATETIME, " +
"LastModification DATETIME, " +
"CreatorName TEXT)";
参考方案
代替手动创建字符串,而使用参数化查询并添加参数值。如您所知,使用String.Format肯定会导致转换错误,并使您容易受到SQL注入攻击。
使用参数时,将不进行任何转换就传递值,因此您不必担心转换错误或注入攻击。当大多数数据库知道哪些部分可以更改以及哪些部分在一次执行与下一次执行之间保持不变时,大多数数据库还可以更好地优化查询。
在您的情况下,您可以使用以下方式:
cmd.CommandText= "INSERT INTO Orders(" +
"OrderId, " +
"Status, " +
"CreationTime, " +
"LastModification, " +
"CreatorName) " +
"VALUES (@orderId,@status,@creation,@modification,@creator)";
cmd.Parameters.AddWithValue("@orderId",orderId);
cmd.Parameters.AddWithValue("@status",status);
cmd.Parameters.AddWithValue("@creation",creation);
cmd.Parameters.AddWithValue("@modification",modification);
cmd.Parameters.AddWithValue("@creator",creator);
离题-为什么参数化查询更快
所有服务器都必须解析查询以了解其结构并创建执行计划以运行查询。该计划包含要使用的索引,过滤或加入的策略,可能需要的临时结构等。创建此计划的成本很高,因此大多数服务器会缓存它们创建的计划供以后使用。
除非服务器知道查询中的哪些值实际上是参数,以及哪些是手工编码的,否则,如果不实际解析查询,就无法决定是否可以使用现有计划或创建新计划。通过自己指定参数,您可以允许服务器创建更好和可重用的计划。如果您每秒执行很多查询,则可以大大提高效率。
更不用说以原始格式传递值要轻得多,因此比以文本形式传递值要快得多。
当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
改造正在返回一个空的响应主体 - java我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…
每个文件合并后添加换行 - python我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…
您如何在列表内部调用一个字符串位置? - python我一直在做迷宫游戏。我首先决定制作一个迷你教程。游戏开发才刚刚开始,现在我正在尝试使其向上发展。我正在尝试更改PlayerAre变量,但是它不起作用。我试过放在列表内和列表外。maze = ["o","*","*","*","*","*",…
Mongo汇总 - javascript我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …