2012-05-21 68 views
0

我遇到了SqlServerCe的一个小问题。 当使用下面的sqlString来执行ExecuteNonQuery();命令我得到下面的错误。嵌套的SELECT问题

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 ] 

有什么建议?

方法

public static void InsertImage(Contributor contObj, string ImageName) 
{ 
    string sqlString = "INSERT INTO Images (UID, Name) " + 
     "VALUES ((SELECT ID FROM [Contributors] WHERE ID = @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(); 
    } 
} 

回答

1

你将要使用INSERT INTO...SELECT..FROM

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

如果你已经知道的值@ID,那么你可以使用INSERT INTO... VALUES...查询

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(); 
    } 
} 
+0

@Name不是贡献者。 Images.UID和Contributors.ID – user1027620

+0

之间存在外键关系我认为您可能需要关键字VALUES。 – JHS

+0

由于您使用的是参数,因此在执行时需要将@Name值告诉它。你可以编辑你的问题发布你的完整代码吗?那么我可以告诉你。 – Taryn

2

为什么你在这里使用嵌套选择?由于@UID已经引用您要选择的ID列,你就不能这样做:

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

如果你真的必须使用一个选择,然后看看bluefeet的回答。他提供了您指定的参数(@Name)作为插入的值之一,因此它的确定。

0

你可以做到这一点,而不是这样:

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