Tahir Mahmood From karachi Ответов: 1

Как устранить ошибку преобразования типа данных varchar в int.


я сталкиваюсь с вышеуказанным исключением пожалуйста дайте мне решение как его решить код приведен ниже


public ActionResult Create([Bind(Include ="Subject_Id,SubjName,SubjCode,SubjMaxMarks,SubjTheory,SubjPractical,SubjTPassMarks,SubjPPassAMarks")] Tab_Subject subject)
      {
          if (ModelState.IsValid)
          {
              Sims.Database.ExecuteSqlCommand("EXEC SP_SubjectInsertUpdate '" + subject.SubjName + "', '" + subject.SubjCode + "'," + subject.SubjMaxMarks + "," + subject.SubjTheory + "," +subject.SubjPractical + "," +subject.SubjTPassMarks + "," + subject.SubjPPassAMarks );

              //Sims.Database.ExecuteSqlCommand("EXEC SP_SubjectInsertUpdate '" + Subject.SubjName + "'");


              Sims.SaveChanges();
              return RedirectToAction("SectionView");
          }
          return View(subject);


Что я уже пробовал:

<pre lang="C#">public ActionResult Create([Bind(Include =&quot;Subject_Id,SubjName,SubjCode,SubjMaxMarks,SubjTheory,SubjPractical,SubjTPassMarks,SubjPPassAMarks&quot;)] Tab_Subject subject)
      {
          if (ModelState.IsValid)
          {
              Sims.Database.ExecuteSqlCommand(&quot;EXEC SP_SubjectInsertUpdate &#39;&quot; + subject.SubjName + &quot;&#39;, &#39;&quot; + subject.SubjCode + &quot;&#39;,&quot; + subject.SubjMaxMarks + &quot;,&quot; + subject.SubjTheory + &quot;,&quot; +subject.SubjPractical + &quot;,&quot; +subject.SubjTPassMarks + &quot;,&quot; + subject.SubjPPassAMarks );

              //Sims.Database.ExecuteSqlCommand(&quot;EXEC SP_SubjectInsertUpdate &#39;&quot; + Subject.SubjName + &quot;&#39;&quot;);


              Sims.SaveChanges();
              return RedirectToAction(&quot;SectionView&quot;);
          }
          return View(subject);</pre>



и моя таблица базы данных также приведена ниже

открытый частичный класс Tab_Subject
{
[Ключ]
public int Subject_Id { get; set; }

[StringLength(50)]
public string SubjName { get; set; }

[StringLength(50)]
public string SubjCode { get; set; }

публичная десятичная дробь? SubjMaxMarks { get; set; }

публичная десятичная дробь? Subjecteory { get; set; }

публичная десятичная дробь? SubjPractical { get; set; }

публичная десятичная дробь? Subjectpassmarks { get; set; }

публичная десятичная дробь? SubjPPassAMarks { get; set; }
}

[no name]

Мы действительно ничего не можем вам сказать. Мы ничего не знаем о вашей базе данных.

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Мы понятия не имеем, в чем проблема, поскольку ничего не знаем о данных, которые вы отправили обратно в модель, и содержимом хранимой процедуры SP_SubjectInsertUpdate.

Что я могу сказать, так это то, что использование конкатенации строк для построения SQL-запроса представляет собой огромный риск для безопасности. Google для "атаки SQL-инъекций", чтобы узнать, почему то, что вы делаете, так плохо. Затем погуглите "параметры C# SQL", чтобы узнать, что с этим делать. Скорее всего, это даже решит вашу проблему или, по крайней мере, заставит вас изучить, что вы передаете хранимой процедуре и что ожидает хранимая процедура в порядке и типе параметров.


Tahir Mahmood From karachi

в основном первые два значения являются строковыми а другие десятичными когда я вставляю это в базу данных происходит исключение о котором я уже упоминал я не могу понять в чем проблема

Dave Kreskowiak

Публикация таблицы данных действительно не помогает, так как проблема заключается в вызове хранимой процедуры.

Я уже говорил вам, что нужно сделать, чтобы облегчить отладку.