【发布时间】:2016-03-31 09:47:00
【问题描述】:
我有一段代码用于用新数据更新 Foxpro 表,但是为了获取这些数据,我需要运行多个 select 语句。我关于如何做到这一点的理论是使用参数化查询,但是我现在收到错误
索引超出了数组的范围
我认为这是因为我有多个 SELECT 语句,但是我无法通过连接运行它,因为这些表之间没有链接。
下面是连接字符串和原来的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();
}
【问题讨论】:
-
两张表是什么关系? PROPERTY 表中的每条记录在 SYSTEMNUMBERS 中都有记录吗?
-
约书亚,你需要更好地解释它,你想要达到的目标。检查您的代码几乎不可能理解它。即使它们没有任何关系,您也可以加入两个表,但我认为这不是您的意思。您可以改为将数据获取到本地并使用它们的行位置“加入”(.Zip)它们(您可以通过使用 VFP 的 recno() 函数来做到这一点,只有在单个表上使用但不信任它时才能信任它更好)。如果您可以对数据和您想要实现的目标进行采样,我们可以提供更好的帮助。评论不允许多写:(
-
道歉。本质上,有两个 VFP 表已经填充了数据;这些是属性和客户表。我要更新的每个表中都有一列:PROPERTY 中的 PROPCODE 和 CLIENT 中的 PROPCODET,这两列连接了我需要将这两个记录更新为代码中定义的新值“Propcode2”的两个表。 SYSTEMNUMBERS 对此并不重要,因为我可以在必要时手动定义。
-
但这还不够解释,检查你的代码,还有数据类型不兼容。恐怕您需要将表格作为列表和您想要的结果进行采样。否则,看起来每个表只有一个更新命令就可以了。
标签: c# visual-foxpro