【发布时间】:2017-01-05 22:14:42
【问题描述】:
我以前从未做过这样的事情,如果我只向它传递一个整数,它就可以工作,但我有一个需要用于 POSITION_ID 的列表。例如,该列表只有 1、2、3..等。这会从ExecuteParameterQuery 引发异常The specified object must not be an instance of a generic type。当涉及到列表时,我不确定是否/如何执行此操作。
通过帮助进行的更改。
public List<Dictionary<string, string>> SelectedLineHistory(string partProgram, string machineId, List<int> Line2, bool orderByDate = false)
{
List<Dictionary<string, string>> results = new List<Dictionary<string, string>>();
string query = "SELECT MACHINE_ID, PART_PROGRAM, POSITION_ID, DATE_TIME, SAVE_DATE_TIME,DWELL_STIME, ADJUSTED_AMOUNT, DWELL_OFFSET, EMPL_ID " +
"FROM MPCS.WJ_DWELL_OFFSETS_HIST " +
"WHERE PART_PROGRAM = ? and MACHINE_ID = ? and POSITION_ID = ? ";
if (orderByDate)
{
query += " order by save_date_time desc, position_id asc";
}
List<OleDbParameter> queryParameters = new List<OleDbParameter>();
foreach (var line in Line2)
{
queryParameters.Clear();
queryParameters.Add(new OleDbParameter("PART_PROGRAM", partProgram));
queryParameters.Add(new OleDbParameter("MACHINE_ID", machineId));
queryParameters.Add(new OleDbParameter("POSITION_ID", Line));
results = this.ExecuteParameterQuery(query, queryParameters);
}
return (results);
}
如果我不使用 results = this.ExecuteParameterQuery(query, queryParameters); 而不是 results.add 我会出错,但我认为这不是我的问题。
它仍然会产生原始错误The specified object must not be an instance of a generic type
我就是这样称呼它的。在需要使用 positionID 列表之前再次起作用
我仍在尝试找出我必须按照建议制作“新”的内容,但还没有发现它,但想保持更新。
public void SelectedHistory(bool showMessages = false)
{
List<Dictionary<string, string>> resultHistory = new List<Dictionary<string, string>>();
string machineId = cboMachine.Text.Trim().ToUpper();
string partProg = cboPartPrograms.Text.Trim().ToUpper();
lvViewHistory.Items.Clear();
if (!String.IsNullOrEmpty(machineId) && !String.IsNullOrEmpty(partProg))
{
resultHistory = oracleConnection.SelectedLineHistory(partProg, machineId, Line2, true);
if (resultHistory != null && resultHistory.Count > 0)
{
foreach (Dictionary<string, string> d in resultHistory)
{
ListViewItem lvi = new ListViewItem(d["MACHINE_ID"]);
lvi.SubItems.Add(d["PART_PROGRAM"]);
lvi.SubItems.Add(d["POSITION_ID"]);
lvi.SubItems.Add(d["DATE_TIME"]);
lvi.SubItems.Add(d["SAVE_DATE_TIME"]);
lvi.SubItems.Add(d["DWELL_STIME"]);
lvi.SubItems.Add(d["ADJUSTED_AMOUNT"]);
lvi.SubItems.Add(d["DWELL_OFFSET"]);
lvi.SubItems.Add(d["EMPL_ID"]);
lvViewHistory.Items.Add(lvi);
}
}
else
{
MessageBox.Show("No History Found");
}
}
else
{
MessageBox.Show("Please select Machine_Id and Part Program");
}
lvViewHistory.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
}
无论出于何种原因,它现在都可以工作,但它并没有给我在 line2 中有多少行号的结果,它只是给我最后一个行号的结果。
因此,如果 Line2 有 1,2,3,我应该从行号为 1 2 和 3 的所有行中获取 sql 结果,而不是仅获取行号为 3 的结果。
【问题讨论】:
-
您想在
line2中的每个line执行一次,对吧?您的查询执行需要移到循环内才能发生! -
第 2 行中每个行号一次正确的是
-
阅读有关使用 SQL where in 子句的信息。 w3schools.com/sql/sql_in.asp
-
@STLDeveloper 已编辑,现在正确吗?
-
@Hakunamatata 谢谢你,我会看看这是否对我有帮助。