首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何解决此错误“转换日期和/或时间从字符串时失败”

如何解决此错误“转换日期和/或时间从字符串时失败”
EN

Stack Overflow用户
提问于 2019-05-01 23:12:16
回答 1查看 1.5K关注 0票数 1

我正在创建一个新的应用程序,并试图将DateTime数据类型插入到SQLServer中。错误说

从字符串转换日期和/或时间时,转换失败。

代码:

代码语言:javascript
复制
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{}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-01 23:14:20

只管用

代码语言:javascript
复制
param[4].Value = DateTime.Now;

而不是

代码语言:javascript
复制
param[4].Value = Convert.ToDateTime( DateTime.Now.ToString("yyyy- 
    MM-dd 00:00:00"));

如果需要删除时间部分,请使用:

代码语言:javascript
复制
param[4].Value = DateTime.Now.Date;

或者正如@DBro在评论中提到的那样

代码语言:javascript
复制
param[4].Value = DateTime.Today;

更新1

如果在传递日期参数时遇到问题,请使用以下sql命令,而不传递PaymentDate参数:

代码语言:javascript
复制
string Insertcmd = "INSERT INTO PatientPay (PatientID, Cash, AmountPaid, 
PaymentDate, Reseaon, StaffID) Values (@StaffID, @Cash, @AmountPaid, 
        @type, DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0), @StaffID)";

整个守则将是:

代码语言:javascript
复制
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

您必须重新排序SQL命令中的参数,因为您要在PaymentDate列中插入thr @type参数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55943820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档