Вставка выдает ошибку «Не удалось преобразовать значение параметра из строки в байт» - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь заставить систему управления уходить. Когда я пытаюсь вставить данные в таблицу leave_request, я получаю сообщение об ошибке:

Не удалось преобразовать значение параметра из строки в байт

Мой код:

protected void Button1_Click(object sender, EventArgs e)
{
    // Guid obj = new Guid();
    con.Open();

    SqlCommand cmd = new SqlCommand("request", con);
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add("@empID", SqlDbType.UniqueIdentifier);
    cmd.Parameters["@empID"].Value = new Guid();

    cmd.Parameters.Add("@leave_type", SqlDbType.TinyInt );
    cmd.Parameters["@leave_type"].Value = DropDownList1.SelectedValue.ToString();

    cmd.Parameters.Add("@DayPart", SqlDbType.TinyInt);
    cmd.Parameters["@DayPart"].Value = RadioButton1.ToString();

    cmd.Parameters.Add("@Category", SqlDbType.VarChar);
    cmd.Parameters["@Category"].Value = categorylist.SelectedValue.ToString();

    cmd.Parameters.Add("@CategoryID", SqlDbType.Int);
    cmd.Parameters["@CategoryID"].Value = DropDownList3.SelectedValue.ToString();

    cmd.Parameters.Add("@Reason", SqlDbType.VarChar);
    cmd.Parameters["@Reason"].Value = txtreason.Text.ToString();

    cmd.Parameters.Add("@fromdate", SqlDbType.Date);
    cmd.Parameters["@fromdate"].Value = Calendar1.SelectedDate.ToShortDateString();

    cmd.Parameters.Add("@todate", SqlDbType.Date);
    cmd.Parameters["@todate"].Value = Calendar2.SelectedDate.ToShortDateString();

    cmd.ExecuteNonQuery();

    con.Close();
}

Структура таблицы:

empID uniqueidentifier,
leave_type int,
DayPart int,
CategoryID int,
Category varchar(50),
Reason varchar(500),
fromdate date,
todate date

1 Ответ

0 голосов
/ 30 сентября 2019

Пожалуйста, проверьте в вашей базе данных следующие вещи

  1. В таблице left_request проверьте все передаваемые параметры и посмотрите его тип данных в базе данных, используя alt + f1. Параметры left_type и daypart, один или оба из них являются строковыми в вашей базе данных, однако вы передаете их как tinyint, поэтому возникает проблема.

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

В хранимой процедуре "request" проверьте, чтобы типы данных вашего параметра соответствовали типам данных передаваемого параметра,

Всегда используйте рекомендуемое Microsoft преобразование при отображении .NET Framework в SQLТипы данных сервера, указанные в приведенной ниже ссылке.

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