0

SqlServerCeに小さな問題があります。以下のsqlStringを使用してExecuteNonQuery();を実行する場合。コマンド以下のエラーが発生します。

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

3 に答える 3

2

ここでネストされた選択を使用しているのはなぜですか?選択しているID列をすでに参照しているので@UID、次のことを行うことはできません。

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

本当にselectを使用しなければならない場合は、bluefeetの回答を見てください。彼@Nameは、挿入される値の1つとして指定したパラメーター()を指定しているので、問題ありません。

于 2012-05-21T18:48:55.863 に答える
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();
    }
}
于 2012-05-21T18:46:08.877 に答える
0

代わりに、次のように行うことができます。

string sqlString = @"INSERT INTO Images(UID, Name)
                     SELECT ID, @Name
                     FROM Contributors
                     WHERE ID = @UID"
于 2012-05-21T18:51:06.673 に答える