簡體   English   中英

如何解決該錯誤“從字符串轉換日期和/或時間時轉換失敗”

[英]how to solve that error "Conversion failed when converting date and/or time from character string"

我正在創建一個新應用程序,並且我正在嘗試將 DateTime 數據類型插入到 SQLServer 中。 錯誤說

從字符串轉換日期和/或時間時轉換失敗。

代碼:

string Insertcmd = "INSERT INTO PatientPay (PatientID, Cash, AmountPaid, 
PaymentDate, Reseaon, StaffID) Values (@StaffID, @Cash, @AmountPaid, 
        @type, @PaymentDate, @StaffID)";
        cmd = new SqlCommand(Insertcmd, con);

        SqlParameter[] param = new SqlParameter[6];
        param[0] = new SqlParameter("@PatientID", SqlDbType.Int);
        param[0].Value = PatientID;

        param[1] = new SqlParameter("@Cash", SqlDbType.Float);
        param[1].Value = Cash;

        param[2] = new SqlParameter("@AmountPaid", SqlDbType.Float);
        param[2].Value = AmountPaid;

        param[3] = new SqlParameter("@type", SqlDbType.NVarChar, 255);
        param[3].Value = type;

        param[4] = new SqlParameter("@PaymentDate", SqlDbType.DateTime);
        param[4].Value = Convert.ToDateTime( DateTime.Now.ToString("yyyy- 
        MM-dd 00:00:00"));  // Error

        param[5] = new SqlParameter("@StaffID", SqlDbType.Int, 255);
        param[5].Value = StaffID;
        //Open the connection to database
        con.Open();

        try
        {
            if (con.State == System.Data.ConnectionState.Open)
            {
                //Execute the Adding process
                cmd.Parameters.AddRange(param);
                cmd.ExecuteNonQuery();
             }
         }catch{}

只需使用

param[4].Value = DateTime.Now;

代替

param[4].Value = Convert.ToDateTime( DateTime.Now.ToString("yyyy- 
    MM-dd 00:00:00"));

如果您需要刪除時間部分,請使用:

param[4].Value = DateTime.Now.Date;

或者正如評論中提到的@DBro

param[4].Value = DateTime.Today;

更新 1

如果您在傳遞日期參數時遇到問題,請嘗試使用以下 sql 命令而不傳遞 PaymentDate 參數:

string Insertcmd = "INSERT INTO PatientPay (PatientID, Cash, AmountPaid, 
PaymentDate, Reseaon, StaffID) Values (@StaffID, @Cash, @AmountPaid, 
        @type, DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0), @StaffID)";

整個代碼將是:

string Insertcmd = "INSERT INTO PatientPay (PatientID, Cash, AmountPaid, 
PaymentDate, Reseaon, StaffID) Values (@StaffID, @Cash, @AmountPaid, 
        @type, DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0), @StaffID)";
    cmd = new SqlCommand(Insertcmd, con);

    SqlParameter[] param = new SqlParameter[5];
    param[0] = new SqlParameter("@PatientID", SqlDbType.Int);
    param[0].Value = PatientID;

    param[1] = new SqlParameter("@Cash", SqlDbType.Float);
    param[1].Value = Cash;

    param[2] = new SqlParameter("@AmountPaid", SqlDbType.Float);
    param[2].Value = AmountPaid;

    param[3] = new SqlParameter("@type", SqlDbType.NVarChar, 255);
    param[3].Value = type;

    param[4] = new SqlParameter("@StaffID", SqlDbType.Int, 255);
    param[4].Value = StaffID;
    //Open the connection to database
    con.Open();

    try
    {
        if (con.State == System.Data.ConnectionState.Open)
        {
            //Execute the Adding process
            cmd.Parameters.AddRange(param);
            cmd.ExecuteNonQuery();
         }
     }catch{}

參考


更新 2

由於您是在 PaymentDate 列中插入 thr @type 參數,因此您必須對 SQL 命令中的參數重新排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM