使用以下内容,查询的@table部分出现异常。您可以通过这种方式使用数据表插入SQLite吗?
describe('testing sortByField', () => {
let arrayOfObject = [];
beforeAll(() => {
arrayOfObject = [
{ name: "Name 1", class: "CLASS 4" },
{ name: "Name 2", class: "Class 3" },
{ name: "Name 3", class: "Class 2" },
{ name: "Name 4", class: "Class 1" },
]
})
it('should sort the json array with specified field in ascending order with class as parameter', () => {
expect(arrayOfObject.sort(sortByField("class"))[0].name).toBe("Name 1");
})
it('should sort the json array with specified field in descending order with class and true as parameters', () => {
expect(arrayOfObject.sort(sortByField("class", true))[0].name).toBe("Name 2");
})
it('should sort the json array with specified field in ascending order with class, false and a primerFunction as parameter', () => {
let tPrimerFn = (x) => x.toLowerCase();
expect(arrayOfObject.sort(sortByField("class", false, tPrimerFn))[0].name).toBe("Name 4");
})
it('should sort the simple array in ascending order without passing any field', () => {
expect([4, 3, 2, 1].sort(sortByField())[0]).toBe(1);
})
it('should sort the simple array in ascending order without passing any field', () => {
expect([4, 3, 2, 1].sort(sortByField(null, true))[0]).toBe(4);
})
})
答案 0 :(得分:0)
您不能将DataTable作为参数传递。 我认为要使用DataTable作为参数的主要原因是要在sqlite中批量插入。这是一个例子
using (var transaction = connection.BeginTransaction())
using (var command = connection.CreateCommand())
{
command.CommandText =
"INSERT INTO contact(name, email) " +
"VALUES($name, $email);";
var nameParameter = command.CreateParameter();
nameParameter.ParameterName = "$name";
command.Parameters.Add(nameParameter);
var emailParameter = command.CreateParameter();
emailParameter.ParameterName = "$email";
command.Parameters.Add(emailParameter);
foreach (var contact in contacts)
{
nameParameter.Value = contact.Name ?? DBNull.Value;
emailParameter.Value = contact.Email ?? DBNull.Value;
command.ExecuteNonQuery();
}
transaction.Commit();
}
答案 1 :(得分:0)
不幸的是,参数不能用于表示表或列的名称。您只能使用它们在WHERE语句或UPDATE / INSERT / DELETE操作中表示值。
因此,您应该一个一个地插入记录,或编写代码来支持批量更新,如this question
中所述。但是,如果您想尝试一个非常有用的第三方库,则可以编写一个非常简单的代码。
此示例是使用Dapper完成的
using(SQLiteConnection connection = GetOpenedConnection())
{
string cmdText = @"INSERT OR REPLACE INTO ZZ_DBA_Stop
(Path, StopName, Latitude, Longitude)
VALUES(@Path, @StopName, @Latitude, @Longitude) ";
connection.ExecuteAsync(cmdText, tempResults);
}
Dapper是一个简单的ORM,它扩展了IDbConnection的功能。它知道如何处理模型以及如何从数据库中存储和检索它们。
在上面的示例中,您将整个列表作为第二个参数传递给ExecuteAsync,Dapper将为您插入整个列表中的数据。这里唯一的要求是模型的属性具有与字段相同的名称
GetOpenedConnection 只是返回已打开的SQLiteConnection的方法的占位符。您可以将其替换为创建连接所需的代码,并添加一个调用以在调用ExecuteAsync之前打开