Запишите набор данных в таблицу SQL

Поскольку ваш json - это просто массив объектов, цикл foreach не нужен, и вы можете просто указать, что результат декодирования должен быть массивом News, указав тип результата в квадратных скобках: [News].self [116 ]

guard let news = try? JSONDecoder().decode([News].self, from: Data(jsonNews.utf8)) else {
    debugPrint("An error has occurred")
    return
}

debugPrint(news)
arrayNews = news

Кроме того, если нет конкретной причины, по которой ваша модель должна наследоваться от NSObject, вы можете упростить ее, сделав ее struct. Также вам не нужны значения по умолчанию, так как все значения будут назначаться инициализатором декодера

struct News: Decodable {
    let idPlace, namePlace, dateMsg, msg, urlPicture: String
}
5
задан MartGriff 14 February 2009 в 14:51
поделиться

4 ответа

В зависимости от того, сколько строк Вы имеете в DataSet, вероятно, лучшая вещь сделать состояла бы в том, чтобы использовать SqlCommandBuilder, как так:

var connection = new SqlConnection("my connection string");
connection.Open();

// repeat for each table in data set
var adapterForTable1 = new SqlDataAdapter("select * from table1", connection);
var builderForTable1 = new SqlCommandBuilder(adapterForTable1);
adapterForTable1.Update(myDataSet, "Table1");

Если Вам определили сложные отношения между таблицами в DataSet, я боюсь, что Вы не можете использовать SqlCommandBuilder. То, что необходимо будет сделать, вместо этого, определяют адаптер данных для каждой таблицы в DataSet. Затем обновите таблицы в DataSet в порядке зависимости (т.е. сделайте таблицы без зависимостей сначала, затем зависимые таблицы).

Вот пример родительской/дочерней вставки (обратите внимание, что Вы сделали бы подобные вещи для обновлений). Table1 является родителем и имеет ParentId (столбец идентификационных данных), и поле NVARCHAR ParentValue. Table2 является ребенком, имеет его собственный столбец идентификационных данных (ChildId), поле внешнего ключа (ParentId) и его собственное значение (ChildValue).

var myDataSet = new DataSet();

// ** details of populating the dataset omitted **

// create a foreign key relationship between Table1 and Table2.
// add a constraint to Table2's ParentId column, indicating it must
// existing in Table1.
var fk = new ForeignKeyConstraint("fk", myDataSet.Tables["Table1"].Columns["ParentId"], myDataSet.Tables["Table2"].Columns["ParentId"])
{
    DeleteRule = Rule.Cascade,
    UpdateRule = Rule.Cascade
};
myDataSet.Tables["Table2"].Constraints.Add(fk);
myDataSet.EnforceConstraints = true;

var connection = new SqlConnection("my connection string");
var adapterForTable1 = new SqlDataAdapter();
adapterForTable1.InsertCommand =
    new SqlCommand("INSERT INTO MasterTable (ParentValue) VALUES (@ParentValue); SELECT SCOPE_IDENTITY() AS ParentId", connection);
adapterForTable1.InsertCommand.Parameters.Add("@ParentValue", SqlDbType.NVarChar).SourceColumn = "ParentValue";
var adapterForTable2 = new SqlDataAdapter();
adapterForTable2.InsertCommand =
    new SqlCommand("INSERT INTO ChildTable (ParentId, ChildValue) VALUES (@ParentId, @ChildValue); SELECT SCOPE_IDENTITY() AS ChildId", connection);
adapterForTable2.InsertCommand.Parameters.Add("@ParentId", SqlDbType.Int).SourceColumn = "ParentId";
adapterForTable2.InsertCommand.Parameters.Add("@ChildValue", SqlDbType.NVarChar).SourceColumn = "ChildValue";

connection.Open();
adapterForTable1.Update(myDataSet, "Table1"); // insert rows in parent first
adapterForTable2.Update(myDataSet, "Table2"); // child second
7
ответ дан 14 December 2019 в 01:19
поделиться

Вы, вероятно, хотите посмотреть на DataAdapters и TypedDatasets.

Они все доступны через разработчика VS, просто создают набор данных и отбрасывают таблицы SQL в от представления проводника сервера. :) (или что-то как этот, это было некоторое время),

1
ответ дан 14 December 2019 в 01:19
поделиться

Если DataTables и Таблицы SQL выстраиваются в линию, то быстрым путем является SqlBulkCopy.

3
ответ дан 14 December 2019 в 01:19
поделиться

При использовании.NET 3/3.5 Вы могли бы изучить LINQ.

-2
ответ дан 14 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: