1

我想传递一些值还包括日期时间。我正在尝试这种方式,但我收到此错误“将数据类型 nvarchar 转换为 datetime2 时出错”。

这是我的功能;

public string InsertRezervation(int GarageId, int MemberId, string StartDate, string EndDate, bool isFinish)
        {
            SqlConnection connection = null;
            SqlCommand command = null;
            int rowsAffected = 0;

            string format = "yyyyMMdd";
            DateTime startDate = new DateTime(2014, 12, 18);
            DateTime endDate = new DateTime(2014, 12, 25);
            if (StartDate != null && EndDate != null)
            {
                startDate = DateTime.ParseExact(StartDate, format, CultureInfo.InvariantCulture);
                endDate = DateTime.ParseExact(EndDate, format, CultureInfo.InvariantCulture);
            }
            connection = new SqlConnection(conn);
            connection.Open();
            command = new SqlCommand("Parking.Rezervation", connection);
            command.CommandType = System.Data.CommandType.StoredProcedure;
            command.Parameters.Add("@PGarageId", System.Data.SqlDbType.NVarChar).Value = GarageId;
            command.Parameters.Add("@PMemberId", System.Data.SqlDbType.NVarChar).Value = MemberId;
            command.Parameters.Add("@PStartDate", System.Data.SqlDbType.NVarChar).Value = startDate;
            command.Parameters.Add("@PEndDate", System.Data.SqlDbType.NVarChar).Value = endDate;
            command.Parameters.Add("@PIsFinish", System.Data.SqlDbType.NVarChar).Value = isFinish;
            command.CommandText = "Parking.Rezervation";
            rowsAffected = command.ExecuteNonQuery();
            connection.Close();
            return string.Format("You entered: {0}", rowsAffected.ToString());

        }

这是界面;

[OperationContract]
        [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, 
        UriTemplate = "/InsertRezervation?GarageId={GarageId}&MemberId={MemberId}&StartDate={StartDate}&EndDate={EndDate}&isFinish={isFinish}")]
        string InsertRezervation(int GarageId, int MemberId, string StartDate, string EndDate, bool isFinish);

我该如何解决这个问题。

4

1 回答 1

0

您正在DateTime使用类型传递您的值SqlDbType.NVarChar。改变他们SqlDbType.DateTime2喜欢;

command.Parameters.Add("@PStartDate", SqlDbType.DateTime2).Value = startDate;
command.Parameters.Add("@PEndDate", SqlDbType.DateTime2).Value = endDate;

如果它们适合您的列类型,还可以更改 forGarageIdMemberIdtoSqlDbType.Int和 for isFinishto 。SqlDbType.Bit不要NVarChar全部使用。

还可以使用using语句自动处理您的连接和命令,而不是Close手动调用方法。

于 2015-12-24T10:13:56.697 回答