Поможете разобраться с ошибкой System.Data.SqlClient.SqlException (0x80131904): Must declare the scalar variable?

ошибка в этом коде:
try {
                string str = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                SqlConnection con = new SqlConnection(str);
                SqlCommand com = new SqlCommand("UPDATE [Composition] SET [Mark] = @Mark WHERE [Id_composition] = @original_Id_composition AND (([Mark] = @original_Mark) OR ([Mark] IS NULL AND @original_Mark IS NULL))", con);
                con.Open();
                SqlDataReader reader = com.ExecuteReader();
                //reader.Open();
                Session.Add("Mark", (int)reader["Mark"]);
                Session.Add("Id", (int)reader["Id_composition"]);
                com.Parameters.AddWithValue("@original_Id_composition", (Session["Id"]));
                com.Parameters.Add("@Mark", SqlDbType.Int).Value =(int)(Session["Mark"])+1;
                reader.Close();
                con.Close();
                LErr.Text = "Спасибо!, нам очень важен ваш голос! ";
            }
            catch(Exception ex)
            {
                LErr.Text = "Что то пошло не так--- " + ex.ToString();
            }

Здесь в таблице надо в столбец Mark изменить, но вылетает ошибка
System.Data.SqlClient.SqlException (0x80131904): Must declare the scalar variable "@Mark". в System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) в System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) в System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) в System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() в System.Data.SqlClient.SqlDataReader.get_MetaData() в System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest) в System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) в System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) в System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) в System.Data.SqlClient.SqlCommand.ExecuteReader() в Diplom.MyKabinet.GV_SelectedIndexChanged(Object sender, EventArgs e) в D:\учеба\4 курс\Диплом\Diplom\Diplom\MyKabinet.aspx.cs:строка 120 ClientConnectionId:b4a9d6da-85b7-4747-bb42-41c9aa705e92 Error Number: 137, State: 2, Class: 15
  • Вопрос задан
  • 2973 просмотра
Пригласить эксперта
Ответы на вопрос 2
@dmitryKovalskiy
программист средней руки
Навскидку - у вас написана какая-то фигня. 1) я не знаю что такое Session в данном контексте, ну да и бог с ней. 2)Вы сначала выполняете запрос, а затем подсовываете ему значение переменной @Mark .
com.Parameters.AddWithValue("@original_Id_composition", (Session["Id"]));
                com.Parameters.Add("@Mark", SqlDbType.Int).Value =(int)(Session["Mark"])+1;

Перенесите эти 2 строки кода перед строчкой con.Open()
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
Сформируйте строку SQL без параметров (подставив нужные значения в неё) и выполните.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы