2012-05-21 64 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"