SQL通过查询/命令的一个参数传递许多值(向量)

时间:2018-06-20 08:16:09

标签: sql firebird

首先,我想说的是我正在使用Firebird,不知道这是否与其他数据库服务器有关。

我要做的是将部分命令字符串作为参数传递。

我有这样的代码:

using (FbConnection con = new FbConnection(M.Baza.connectionString))
{
    con.Open();
    using (FbCommand cmd = new FbCommand("DELETE FROM STAVKA WHERE VRDOK = @VRDOK AND BRDOK = @BRDOK AND ROBAID IN (@ROBAID)", con))
    {
        cmd.Parameters.AddWithValue("@VRDOK", vrDok);
        cmd.Parameters.AddWithValue("@BRDOK", brDok);
        cmd.Parameters.AddWithValue("@ROBAID", robaId); //robaId is string which looks like this '15, 18, 16, 14, 28'

        cmd.ExecuteNonQuery();

        if (showMessage)
            MessageBox.Show("Stavke uspesno obrisane!");
    }
}

上面的代码不起作用,它会丢弃错误

  

无法将类型为“ system.Int32”的对象转换为类型为“ system.iconvertible”

但是当我编写这样的代码时:

using (FbConnection con = new FbConnection(M.Baza.connectionString))
{
    con.Open();
    using (FbCommand cmd = new FbCommand("DELETE FROM STAVKA WHERE VRDOK = @VRDOK AND BRDOK = @BRDOK AND ROBAID IN (" + robaId + ")", con))
    {
        cmd.Parameters.AddWithValue("@VRDOK", vrDok);
        cmd.Parameters.AddWithValue("@BRDOK", brDok);

        cmd.ExecuteNonQuery();

        if (showMessage)
            MessageBox.Show("Stavke uspesno obrisane!");
    }
}

有效。

为什么会这样?

假设我有这样的命令"SELECT " + columns + " FROM TABLE",其中columns是字符串类型,看起来像这样的column1, column2, column3,并且可以正常工作。如何使相同的代码看起来像"SELECT @COLUMNS FROM TABLE"并传递@COLUMNS,就像我通过cmd.Parameters.AddWithValue("@COLUMNS", columns);传递参数一样

0 个答案:

没有答案