使用内部联接的MS Access SQL更新查询

时间:2017-11-15 18:06:30

标签: c# ms-access sql-update inner-join

我一直在尝试使用MS Access进行查询。我正在使用C#.NET oledb来访问数据库。我已经使用SELECT,DELETE和更简单的UPDATE查询成功访问了数据库。这个更新有点复杂 - 将三个表与INNER JOINS结合在一起。我有几次使用SELECT INNER JOINed三个表。没问题。这个给我一个错误"没有给出一个或多个必需参数的值。"只有四个参数。我发现其中一个是16位整数,所以我在使用之前将其更改为Short。所有的价值都在那里。所有表格和列都在那里,拼写正确。我正在展示?语法,但我还使用了另一种语法,在SQL中以" @"开头给出一个变量名,像" @ index&#34 ;;这是我通常在其他地方使用的语法,但它在这里不起作用。参数的列出顺序与它们在SQL中的顺序相同。这也给我带来了麻烦。所以我想知道是否有人对此查询可能出错的其他想法。

string sConn = dataBaseClass.getAccessDBsymbolLibConnString(sSEPfilename);
Int16 nCoreIndexShort = (short)nCoreIndex;
using (OleDbConnection conn = new OleDbConnection(sConn))
{
    using (OleDbCommand addCommand = conn.CreateCommand())
    {
        string sSQL = "UPDATE ([ConnectionTarget] AS C  INNER JOIN [Connection] AS B ON C.[Connection] = B.[Counter]) ";
        sSQL += "INNER JOIN [Component] AS A ON B.[CompCounter] = A.[Counter] ";
        sSQL += "SET C.[WireColor] = ?, C.[WireSize] = ? ";
        sSQL += "WHERE A.[Counter] = ? AND B.[ConnectionNumber] = ?; ";
        addCommand.CommandText = sSQL;
        addCommand.Parameters.AddWithValue("C.[WireColor]", sColor);
        addCommand.Parameters.AddWithValue("C.[WireSize]", sSize);
        addCommand.Parameters.AddWithValue("A.[Counter]", nMulticoreFanout);
        addCommand.Parameters.AddWithValue("B.[ConnectionNumber]", nCoreIndexShort);
        addCommand.Connection = conn;
        conn.Open();
        int nDone = addCommand.ExecuteNonQuery();
    }
}

感谢您的帮助。不,MS Access不是我首选的数据库,但我在这里别无选择。

0 个答案:

没有答案