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と forisFinishを変更します。SqlDbType.Bitそれらすべてに使用しないNVarCharでください。

また、usingステートメントCloseを使用して、メソッドを手動で呼び出す代わりに、接続とコマンドを自動的に破棄します。

于 2015-12-24T10:13:56.697 に答える