2012-05-21 2 views
0

У меня небольшая проблема с SqlServerCe. При использовании приведенного ниже sqlString для выполнения ExecuteNonQuery(); command Я получаю ошибку ниже.Вложенный 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) 

Edit, вот ваш код с запросом на обновление

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" 
Смежные вопросы