C# 嵌套选择问题

C# 嵌套选择问题,c#,sql,sql-server,C#,Sql,Sql Server,我对SqlServerCe有一个小问题。 使用以下sqlString执行ExecuteOnQuery()时;命令我得到下面的错误 string sqlString = "INSERT INTO Images (UID, Name) " + "VALUES ((SELECT ID FROM Contributors WHERE ID = @UID), @Name);"; 给出此错误: There was an error parsi

我对SqlServerCe有一个小问题。 使用以下sqlString执行ExecuteOnQuery()时;命令我得到下面的错误

string sqlString = "INSERT INTO Images (UID, Name) " +
            "VALUES ((SELECT ID FROM Contributors WHERE ID = @UID), @Name);";
给出此错误:

There was an error parsing the query. [ Token line number = 1,Token line offset = 41,Token in error = SELECT ]
有什么建议吗

方法
您需要使用
INSERT-in…SELECT..FROM

string sqlString = "INSERT INTO Images (UID, Name) " +
            "SELECT ID, @Name FROM Contributors WHERE ID = @UID;";
如果您已经知道
@ID
的值,那么可以使用
插入到。。。值…
query

INSERT INTO Images (UID, Name)
VALUES (@UID, @Name)
编辑,这是您的更新查询代码

public static void InsertImage(Contributor contObj, string ImageName)
{
    string sqlString = "INSERT INTO Images (UID, Name) " +
        "VALUES (@UID, @Name)";
    using (SqlCeConnection sqlConnection =
        new SqlCeConnection(WebConfigurationManager.ConnectionStrings["DefaultSQL"].ConnectionString))
    {
        SqlCeCommand sqlCommand = new SqlCeCommand(sqlString, sqlConnection);
        sqlCommand.Parameters.AddWithValue("@UID", contObj.ID);
        sqlCommand.Parameters.AddWithValue("@Name", ImageName);
        sqlConnection.Open();
        sqlCommand.ExecuteNonQuery();
        sqlConnection.Close();
    }
}

您需要使用
INSERT-in…SELECT..FROM

string sqlString = "INSERT INTO Images (UID, Name) " +
            "SELECT ID, @Name FROM Contributors WHERE ID = @UID;";
如果您已经知道
@ID
的值,那么可以使用
插入到。。。值…
query

INSERT INTO Images (UID, Name)
VALUES (@UID, @Name)
编辑,这是您的更新查询代码

public static void InsertImage(Contributor contObj, string ImageName)
{
    string sqlString = "INSERT INTO Images (UID, Name) " +
        "VALUES (@UID, @Name)";
    using (SqlCeConnection sqlConnection =
        new SqlCeConnection(WebConfigurationManager.ConnectionStrings["DefaultSQL"].ConnectionString))
    {
        SqlCeCommand sqlCommand = new SqlCeCommand(sqlString, sqlConnection);
        sqlCommand.Parameters.AddWithValue("@UID", contObj.ID);
        sqlCommand.Parameters.AddWithValue("@Name", ImageName);
        sqlConnection.Open();
        sqlCommand.ExecuteNonQuery();
        sqlConnection.Close();
    }
}

为什么在这里使用嵌套的select?既然
@UID
已经引用了您正在选择的ID列,您就不能执行以下操作:

INSERT INTO Images (UID, Name) 
VALUES (@UID, @Name)

如果您真的必须使用select,那么请查看BlueFoot的答案。他正在提供您指定的参数(
@Name
)作为要插入的值之一,因此可以。

为什么在此处使用嵌套的select?既然
@UID
已经引用了您正在选择的ID列,您就不能执行以下操作:

INSERT INTO Images (UID, Name) 
VALUES (@UID, @Name)

如果您真的必须使用select,那么请查看BlueFoot的答案。他正在提供您指定的参数(
@Name
)作为要插入的值之一,因此没有问题。

您可以这样做:

string sqlString = @"INSERT INTO Images(UID, Name)
                     SELECT ID, @Name
                     FROM Contributors
                     WHERE ID = @UID"

您可以这样做:

string sqlString = @"INSERT INTO Images(UID, Name)
                     SELECT ID, @Name
                     FROM Contributors
                     WHERE ID = @UID"

@姓名不在贡献者中。Images.UID和Contributors.IDI之间存在外键关系。我认为您可能需要关键字值。因为您使用的是参数,所以在执行时需要告诉它@Name值。你可以编辑你的问题后,你的完整代码?然后我可以向您展示。@user1027620我更新了我的答案,因为您正在传递name参数,如果该参数不存在于您提供的值bluefeet的表中并不重要,我得到的是->此位置不允许使用参数。请确保“@”符号位于有效位置,或者参数在此SQL语句中完全有效。@名称不在贡献者中。Images.UID和Contributors.IDI之间存在外键关系。我认为您可能需要关键字值。因为您使用的是参数,所以在执行时需要告诉它@Name值。你可以编辑你的问题后,你的完整代码?然后我可以向您展示。@user1027620我更新了我的答案,因为您正在传递name参数,如果该参数不存在于您提供的值bluefeet的表中并不重要,我得到的是->此位置不允许使用参数。请确保“@”符号位于有效位置,或者参数在此SQL语句中完全有效。