У меня есть кусок кода, который используется для обновления таблицы Foxpro новыми данными, однако для получения этих данных мне нужно запустить более одного оператора select. Моя теория о том, как это сделать, чтобы использовать параметризованные запросы, однако я теперь получаю ошибкуВыполнение параметризованных запросов по нескольким выборочным статусам
Индекса находился вне границ массива
Я полагаю, что это потому, что у меня есть несколько ЗЕЬЕСТА , однако я не могу запустить это с помощью соединения, поскольку между этими таблицами нет ссылки.
Внизу строка соединения и оригинальный Выберите оператор
using (var importConnection = new OleDbConnection(
connectionString: @"Provider=vfpoledb.1;
Exclusive=false;
data source=C:\Users\Joshua.cameron\Desktop\PCHomesImportTestBlank\PCHomesServer\DATABASE\pchomes.dbc")
)
using (OleDbCommand CodeChange = new OleDbCommand(
@"select NUM
from SYSTEMNUMBERS;
select PROPCODE from PROPERTY order by PROPCODE", importConnection))
И код для вызова и обновления.
importConnection.Open();
Console.WriteLine("Visual Foxpro connection open");
// Initiate the reader to SQL
var exportReader = CodeChange.ExecuteReader();
// Start reading
while (exportReader != null && exportReader.Read())
{
// Set parameter values whilst reading from SQL
Int32 currentNum = Int32.Parse(exportReader.GetInt32(0).ToString());
string propcode = exportReader.GetValue(1).ToString();
currentNum = currentNum + 1;
string padprop = currentNum.ToString().PadLeft(3);
string propcode2 = "BIDME_" + padprop;
// insert into VFP
var propins = new OleDbCommand(@"update PROPERTY set PROPCODE=" + propcode2 + "where PROPCODE=" + propcode);
var clientins = new OleDbCommand(@"update CLIENT set PROPCODET="+ propcode2 + "where PROPCODET=" + propcode);
try
{
propins.ExecuteNonQuery();
}
catch (Exception p)
{
Console.Write("Error!");
Console.Write(p);
Console.Read();
}
try
{
clientins.ExecuteNonQuery();
}
catch (Exception c)
{
Console.Write("Error!");
Console.Write(c);
Console.Read();
}
try
{
CodeChange.ExecuteNonQuery();
}
catch (Exception e)
{
Console.Write("Error Writing to database");
Console.Write(e);
Console.ReadKey();
}
}
// done
Console.WriteLine("Complete!");
importConnection.Close();
}
Какова взаимосвязь между два стола? У вас есть запись в SYSTEMNUMBERS для каждой записи в таблице PROPERTY? – Steve
Джошуа, вам нужно объяснить это лучше, чего вы пытаетесь достичь. Это почти невозможно понять, проверяя ваш код. Вы можете присоединиться к двум таблицам, даже если они не имеют никакого отношения, но я предполагаю, что это не то, что вы имели в виду. Вместо этого вы могли бы получить данные на локальном компьютере и «присоединиться» (.Zip) к ним со своими позициями строк (это можно сделать с помощью функции recno() для VFP, которой вы можете доверять, только если она используется в одной таблице, но не доверяет ей лучше). Если вы можете опробовать свои данные и что вы хотите достичь, мы могли бы помочь лучше. Комментарии не позволяют писать больше :( –
Извинения По существу, есть две таблицы VFP, уже заполненные данными, это таблицы свойств и клиента. В каждой таблице я хочу обновить: PROPCODE в PROPERTY и PROPCODET в КЛИЕНТЕ эти два столбца соединяют две таблицы. Мне нужно обновить обе эти записи до нового значения «Propcode2», определенного в коде. SYSTEMNUMBERS не важны для этого, так как я могу определить это вручную, если необходимо. –