Так что я пытаюсь получить данные из одной таблицы (table1), а затем записывать выбранные данные во вторую таблицу (таблица2). Я могу получить данные из таблицы1 и выбрать нужные данные. У меня возникли проблемы с записью его на стол2.F # SqlCommand динамически писать в таблицу SQL
Это то, что я имею на данный момент:
let insertData(data: string []List) =
let tableName = data.Item(0).GetValue(0).ToString() //Gets the table Name
let columnTypes = GetDevTableColumnsTypes tableName
let mutable tableDataTemp = List.empty
for i = 0 to data.Length-1 do
let mutable rowDataTemp = List.empty
for j = 0 to data.Item(i).Length-1 do
if data.Item(i).GetValue(j).Equals(tableName) then //if statement removes table name from string array.
System.Diagnostics.Debug.WriteLine("tableName removed from data")
else
let cellData = data.Item(i).GetValue(j)
rowDataTemp <- cellData :: rowDataTemp
let rowData = rowDataTemp |> List.toArray |> Array.rev
tableDataTemp <- rowData :: tableDataTemp
let tableData = tableDataTemp |> List.toArray |> Array.rev //Probably unneeded
let cn = new SqlConnection(Settings.Azure.SQL.CCSettingDev)
cn.Open()
let sQL = "INSERT INTO [" + tableName + "] VALUES(@param1)"
let db = new SqlCommand(sQL, cn)
db.Parameters.AddWithValue("@param1", tableData)
db.ExecuteNonQuery()
Когда я запускаю код я получаю этот аргумент исключением указал на ExecuteNonQuery:
Исключение типа «System.ArgumentException» произошло в System.Data.dll, но не обрабатывался в коде пользователя
Дополнительная информация: Состояния объектов из System.Object [] в известный тип управляемого управляемого провайдера отсутствует.
Теперь на данный момент я работаю только с 2 таблицами, но вскоре программа будет работать с несколькими таблицами с разными именами столбцов, поэтому мне нужно, чтобы это работало независимо от таблицы, в которую она пишет. table1 и table2 имеют одинаковые столбцы. таблицы 3 и 4 имеют одинаковые столбцы друг с другом, но они имеют разные столбцы для таблиц 1 и 2.
selectedData - массив объектов, который содержит другие массивы объектов.
Если вы считаете, что лучше добавить данные вместо добавления массива, пожалуйста, дайте мне знать.
Любая помощь будет оценена по достоинству.
Я настоятельно советую что вы пересматриваете этот метод. Это простой старый изменяемый код, который делает ввод данных уродливым способом. Этот код был бы плохим в C#. F # ничего не предлагает. Зачем использовать 'GetValue' для получения элемента массива? Зачем использовать 'ToString()', когда массив уже * является строковым массивом? Зачем передавать как имя таблицы *, так и * значения полей в одном массиве? Что это за код? –
Пожалуйста, объясните, какова ваша фактическая бизнес-проблема, а не как вы ее пытались решить. Похоже, вы хотите СМЯТЬ список записей в таблицу? Или вставить только новые записи? Напишите инструкцию 'INSERT ... WHERE', которая объединяется с параметром table и вставляет только новые записи. Передайте параметр таблицы как DataTable. –
, если вы ссылаетесь на первую строку data.GetValue (0) .ToString(). Когда я удаляю tostring, tableName становится obj и, следовательно, несовместим. То, что оно передано (данные), - это имя таблицы плюс числовая ссылка на точку в массиве. Поэтому скажем, что пройденное число равно 2. Это означает, что я хочу 3-е значение в existInTable1. У меня есть массив obj, где я хочу добавить значения в массив ко второй таблице. Я должен был упомянуть, что вся программа - это web api –