从数据表插入SQLite

时间:2019-04-15 20:08:38

标签: c# sqlite

使用以下内容,查询的@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);
            })
        })

2 个答案:

答案 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();
}

Reference: Bulk Insert in Microsoft.Data.Sqlite

答案 1 :(得分:0)

不幸的是,参数不能用于表示表或列的名称。您只能使用它们在WHERE语句或UPDATE / INSERT / DELETE操作中表示值。

因此,您应该一个一个地插入记录,或编写代码来支持批量更新,如this question

中所述。

但是,如果您想尝试一个非常有用的第三方库,则可以编写一个非常简单的代码。

此示例是使用Dapper完成的

NuGet
Project Site

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之前打开