【问题标题】:Can we insert some data along with insert value select query in c# winform我们可以在c#winform中插入一些数据以及插入值选择查询吗
【发布时间】:2019-10-05 06:02:08
【问题描述】:

我想插入日期和月份(在两个 datetimepicker 中)以及插入值选择查询。

我的invoice 表中有五列

Student_id, Amount, Fee_description, issue_date, month

我可以插入前三列的值,但其余两列为空,我不知道将 datetimepicker 值放在哪里??

我在表单的设计视图中为日期和月份选择了一个数据时间选择器

insert into invoice (Student_id, Amount, Fee_description, issue_date, month)
    select 
        student.Student_id, 
        Fee.Fee_Amount, Fee.fee_type
    from 
        student
    join 
        parent on student.father_nic = parent.father_nic
    join 
        allocate_class on student.Student_id = allocate_class.Student_id
    join 
        class on class.class_id = allocate_class.class_id
    join 
        session on allocate_class.session_id = session.session_id
    join 
        Fee on class.class_id = Fee.class_id
    where 
        session.session_id = 1
        and Fee.fee_type = 'Tution Fee'
        and student.status = 'active'

在上面的查询中在哪里添加两个 datetimpicker 值?

【问题讨论】:

    标签: c# sql datetime sql-insert datetimepicker


    【解决方案1】:

    当然。它看起来像这样:

    var cmd = new SqlCommand("insert into invoice (
        Student_id,
    Amount,
    Fee_description,
    issue_date,
    month
    )
    select student.Student_id
     , Fee.Fee_Amount
     , Fee.fee_type
    
     , @issDat
     , @mon
    
      from ...", "conn str here");
    
    
    cmd.Parameters.AddWithValue("@issDat", issueDateDateTimePicker.Value);
    cmd.Parameters.AddWithValue("@mon", monthDateTimePicker.Value);
    

    我已经使用 AddWithValue 来快速解释这个概念 - 谷歌为一个名为“我们可以停止使用 AddWithValue 已经”的博客就如何摆脱它进行了长时间的讨论(在这种情况下它是合理的,因为它没有被用于过滤),但现在我试图联系的概念是:

    一条 sql 语句可以从你那里取一个固定的值:

    SELECT 'hello' FROM table
    

    它也可以采用您提供的固定参数:

    SELECT @pHello FROM table
    

    因此添加参数并使用您的日期时间选择器(或 datetime.Now 或其他)中的固定值归档它们是好的,您应该如何使用 INSERT ... SELECT 样式语句插入固定值

    旁注,尚不清楚月份和发行日期是否相关,但如果它们是相同的日期,那么您不需要存储两次 - 您可以随时从日期中提取月份。

    【讨论】:

    • 欢呼你搞定了......非常感谢你,但我有一个问题......在表单加载时,我将月份 datetimepicker 值更改为monthDateTimePicker.Format = DateTimePickerFormat.Custom; monthDateTimePicker.CustomFormat = "MMMM-yyyy"; ............. 你的一个 cmd.Parameters.AddWithValue("@mon", monthDateTimePicker.Value);它还存储日期和时间
    • 不太确定这是怎么回事,但您应该知道,没有任何诸如“只有一个月的日期,而不是一天/时间”之类的东西 - 日期总是代表特定的时刻,精确到几分之一秒。如果您只想表示一个月,您可以在处理它时忽略日部分,或者存储一些常见的日期和时间值,例如当天的 01 和时间的 00:00,因此您的 2001 年 3 月日期在db 是 2001-03-01 00:00 而你的四月是 2001-04-01 00:00 等等,你总是切断
    • 这就是为什么我说如果发行日期和月份相同,只需将发行日期存储为 2001-04-01 12:34:56.789 并且当您希望月份显示在报告中或无论如何,将其格式化为 yyyy-MMMM,这样它就变成了“2001-April”
    • 非常感谢..你解决了我的问题..真的向你致敬
    • 您可以使用var d = monthDateTimePicker.Value; cmd.Parameters.AddWithValue("@mon", new DateTime(d.Year, d.Month, 1)) 之类的方式修复您的@mon - 它只提取年份和月份,并将日期固定为 1(时间为午夜)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2019-02-23
    • 2014-12-31
    相关资源
    最近更新 更多