Я не могу получить общую сумму из базы данных - PullRequest
1 голос
/ 28 марта 2020

Я пытаюсь получить общую сумму штрафа из моей базы данных и показать ее моим lblFine.Text, но это всегда ошибка:

System.Data.SqlClient.SqlException: ' Ошибка преобразования при преобразовании значения varchar 'Student ID' в тип данных int.

Вот мой код:

public void CountFine()
{
    cn.Open();
    cm = new SqlCommand("SELECT SUM(totalFine) FROM tblFine where studentID = '" + lblStudID.Text + "'", cn);
    lblFine.Text = cm.ExecuteScalar().ToString();
    cn.Close();
}

Любая помощь будет оценена

1 Ответ

4 голосов
/ 28 марта 2020

Кажется, тип studentID в вашей базе данных является целым числом, поэтому вам нужно преобразовать значение вашего lblStudentId в int. Однако этот тип конкатенации строк открыт для атак SQL Injection. Вы всегда должны использовать параметризованные запросы , чтобы избежать SQL Инъекции , а также чтобы избавиться от ошибок:

cm = new SqlCommand("SELECT SUM(totalFine) FROM tblFine where studentID = @studentId", cn);
cm.Parameters.AddWithValue("@studentId", Convert.ToInt32(lblStudID.Text));

Хотя укажите тип напрямую и используйте Значение свойство лучше, чем AddWithValue ::

cm.Parameters.Add("@studentId", SqlDbType.Int).Value = Convert.ToInt32(lblStudID.Text);

Подробнее здесь: https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...