Сохраните значения из запроса select, затем используйте их в запросе на обновление SQL Server CE

У меня есть приложение Winforms с базой данных SQL Server CE 3.5. Я хочу сделать UPDATE запрос и для этого мне нужен SELECT запрос.

Вот что я написал:

string command1 = "SELECT Column1, Column2, Column3 FROM Table1";
string command2 = "UPDATE Table2 SET Column2 = @var2, Column3 = @var3 WHERE Column1 = @var1";

using (SqlCeCommand cmd1=new SqlCeCommand(command1, connection))
{
     SqlCeDataReader reader;
     reader = cmd1.ExecuteReader();

     while (reader.Read())
     {
         int var1 = (int)reader[0];
         int var2 = (int)reader[1];
         string var3 = (string)reader[2];

         SqlCeCommand cmd2= new SqlCeCommand (command2, connection);
         cmd2.ExecuteReader();
     }
}

Я получаю ошибку

Параметр отсутствует. Порядковый номер параметра =3

2 ответа

Решение

У вас есть три параметра в вашей второй команде (command2) - но вы никогда не определяете эти параметры и не устанавливаете никаких значений для их использования!

Попробуйте этот код:

string command1 = "SELECT Column1, Column2, Column3 FROM Table1";
string command2 = "UPDATE Table2 SET Column2 = @var2, Column3 = @var3 WHERE Column1 = @var1";

using (SqlCeCommand cmd1 = new SqlCeCommand(command1, connection))
{
     // define your "cmd2" here, once, before the loop
     SqlCeCommand cmd2 = new SqlCeCommand (command2, connection);

     // define the parameters
     cmd2.Parameters.Add("@var1", SqlDbType.Int);
     cmd2.Parameters.Add("@var2", SqlDbType.Int);
     cmd2.Parameters.Add("@var3", SqlDbType.VarChar, 100);

     SqlCeDataReader reader = cmd1.ExecuteReader();

     while (reader.Read())
     {
         int var1 = (int)reader[0];
         int var2 = (int)reader[1];
         string var3 = (string)reader[2];

         // set the *values* of the parameters
         cmd2.Parameters["@var1"].Value = var1;
         cmd2.Parameters["@var2"].Value = var2;
         cmd2.Parameters["@var3"].Value = var3;

         cmd2.ExecuteNonQuery();
     }
}

Вы не используете переменные var1, var2 и var3. Я предполагаю, что они представляют параметры второго запроса, поэтому вы должны использовать их следующим образом:

SqlCeParameter param = new SqlCeParameter("@var1", SqlDbType.Int); command.Parameters.Add(param);

Смотри официальную документацию здесь: https://msdn.microsoft.com/fr-fr/library/system.data.sqlserverce.sqlcecommand.parameters(v=vs.100).aspx

Другие вопросы по тегам