Как исправить Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона.Заявление было прекращено.' - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь вставить свои данные в SQL Server, но запрос не может быть выполнен из-за ошибки

System.Data.SqlClient.SqlException: 'Преобразование типа данных varchar в данные даты и временитип привел к значению вне допустимого диапазона.

Я использую c # для кодирования.

txtPlateNo.Text = vehicresult.results[0].plate.ToString();
lblDate.Text = DateTime.Now.ToShortDateString();
lblTime.Text = DateTime.Now.ToShortTimeString();

//string parkDate = lblDate.Text;
//DateTime newDate = Convert.ToString(parkDate.ToString("MMddyyyy"));
//string parkTime = lblTime.Text;
//DateTime newTime = Convert.ToDateTime(parkTime);

//label10.Text = newDate;
//string newDate2 = label10.Text.ToString();
//string newTime2 = newTime.ToString();

SqlConnection conn = new SqlConnection(new DBConnection().ConnectionString);
if (conn.State == System.Data.ConnectionState.Closed)
    conn.Open();
SqlDataReader dr;

SqlCommand cmd = new SqlCommand("SELECT * FROM pmsVehicleRecord WHERE clVehicPlateNo='" + txtPlateNo.Text + "'", conn);

dr = cmd.ExecuteReader();

if (dr.HasRows)
{
    while (dr.Read())
    {
        lblFullName.Text = dr["clFullName"].ToString();
        lblUsername.Text = dr["clUsername"].ToString();
        lblAddress.Text = dr["clAddress"].ToString();
        lblPaymentMethod.Text = dr["clPaymentMethod"].ToString();
    }

    dr.Close();
    SqlCommand cms = new SqlCommand("SELECT * FROM pmsParkingRecord WHERE parkVehicPlateNo ='" + txtPlateNo + "' AND parkDate='" + lblDate + "'", conn);
    dr = cms.ExecuteReader();

    if (dr.HasRows)
    {
        dr.Close();
        SqlCommand cmt = new SqlCommand("UPDATE pmsParkingRecord SET parkExitTime='" + DateTime.Now.ToShortTimeString() + "'");
        cmt.Connection = conn;
        if (conn.State == System.Data.ConnectionState.Closed)
            conn.Open();
        SqlDataReader ds = cmt.ExecuteReader();
    }
    else
    {
        dr.Close();
        SqlCommand cmn = new SqlCommand("INSERT INTO pmsParkingRecord (parkUsername, parkFullName, parkAddress, parkVehicPlateNo, parkPaymentMethod, parkDate, parkEntryTime) VALUES ('" + lblUsername.Text + "', '" + lblFullName.Text + "', '" + lblAddress.Text + "', '" + txtPlateNo.Text + "', '" + lblPaymentMethod.Text + "', '" + Convert.ToDateTime(DateTime.Now.ToShortDateString()) + "', '" + Convert.ToDateTime(DateTime.Now.ToShortTimeString()) + "')");
        cmn.Connection = conn;
        if (conn.State == System.Data.ConnectionState.Closed)
            conn.Open();
        SqlDataReader ds = cmn.ExecuteReader();
    }
}
else
{
    lblWarning.Text = "License Plate No is not registered!";
}
dr.Close();

Ожидаемый результат предполагает вставку данных в базу данных и отображениеданные на этикетке.

Ошибка показывает в этой строке

SqlDataReader ds = cmn.ExecuteReader();

1 Ответ

3 голосов
/ 12 мая 2019

Не передавать параметры в тексте запроса. Вместо этого используйте параметры из SQLParameterCollection.

Вот пример, как это сделать

private static void UpdateDemographics(Int32 customerID,
    string demoXml, string connectionString)
{
    // Update the demographics for a store, which is stored 
    // in an xml column. 
    string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
        + "WHERE CustomerID = @ID;";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(commandText, connection);
        command.Parameters.Add("@ID", SqlDbType.Int);
        command.Parameters["@ID"].Value = customerID;

        // Use AddWithValue to assign Demographics.
        // SQL Server will implicitly convert strings into XML.
        command.Parameters.AddWithValue("@demographics", demoXml);

        try
        {
            connection.Open();
            Int32 rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine("RowsAffected: {0}", rowsAffected);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

С SQLCommand.Parameters

Преимуществами являются сильные типы, а также предотвращение внедрения SQL.

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