Итак, я пытаюсь получить данные из одной таблицы (таблица 1), а затем записать выбранные данные во вторую таблицу (таблица 2). Я могу получить данные из таблицы1 и выбрать нужные данные. У меня проблемы с записью в таблицу2.
Вот что у меня есть на данный момент:
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[] с известным собственным типом управляемого поставщика.
На данный момент я работаю только с двумя таблицами, но вскоре программа будет работать с несколькими таблицами с разными именами столбцов, поэтому мне нужно, чтобы это работало независимо от таблицы, в которую она пишет. таблица1 и таблица2 имеют одинаковые столбцы. таблицы 3 и 4 имеют одинаковые столбцы, но отличаются от столбцов таблиц 1 и 2.
selectedData — это массив объектов, который содержит другие массивы объектов.
Если вы считаете, что есть лучший способ добавления данных вместо добавления массива, сообщите мне об этом.
Любая помощь будет оценена по достоинству.
GetValue
для доступа к элементу массива? Зачем использоватьToString()
, когда массив уже является массивом строк? Зачем передавать имя таблицы и значения поля в одном и том же массиве? Что делает весь этот код?? - person Panagiotis Kanavos   schedule 11.10.2016INSERT ... WHERE
, который соединяется с параметром таблицы и вставляет только новые записи. Передайте параметр таблицы как DataTable. - person Panagiotis Kanavos   schedule 11.10.2016tableName
. В любом случае, вы не объяснили, в чем заключается настоящая проблема. - person Panagiotis Kanavos   schedule 11.10.2016VALUES(@whatever)
неверно, если только вы не передадите одно значение. Вы не можете избежать указания столбцов, иначе данные окажутся в неправильном месте. То, что вы знаете, чтоdata.[2]
равноJohn
, аdata.[3]
равноDoe
, не означает, что столбцы базы данных расположены в одном и том же порядке. - person Panagiotis Kanavos   schedule 11.10.2016