如何使用wpf在C#中使用sqlitedatareader对象在日期选择器上分配和显示日期值

时间:2013-10-10 04:52:56

标签: c# sqlite datetime datepicker wpf-controls

我想从Sqlite数据库中读取日期时间值并将其分配给datepicker控件。这是我正在尝试的代码:

try
            {
                sqlitecon.Open();

                string Query = "Select * from Customer_New where Cust_Id='" + val + "'  ";

                SQLiteCommand createCommand = new SQLiteCommand(Query, sqlitecon);
              //  createCommand.ExecuteNonQuery();
                SQLiteDataReader dr = createCommand.ExecuteReader();
                while(dr.Read()){
                if(!dr.IsDBNull(1))
                    date_open.DisplayDate = dr.GetDateTime(1);
                if(!dr.IsDBNull(2))    
                    Date_Joining.DisplayDate = dr.GetDateTime(2);
                if(!dr.IsDBNull(3))
                    txt_Title.Text = dr.GetString(3);
                if(!dr.IsDBNull(4))
                    txt_cardnum.Text =dr.GetString(4);

                }


                sqlitecon.Close();


            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

上面的代码是在表单加载事件上执行的。所以当表单加载时,它应该将日期值从db表加载到日期选择器。但是表单打开时显示异常“指定的强制转换无效”的消息框。然后它无法从db加载任何值,如果我从while循环中分配日期字段,则其余的文本字段被正确分配给表单。我的db日期是:MM / DD / YYYY,类型为datetime。在调试时将断点放在“date_open.DisplayDate = dr.GetDateTime(1);”它显示系统日期和时间。我的db表遵循以下顺序:Cust_id | date_open | Date_Joining | .....。请帮助

1 个答案:

答案 0 :(得分:0)

像这样诊断错误: 在SELECT语句中指定列名,然后使用选择它们 reader.GetOrdinal("DateColName") 代码示例:

if(!dr.IsDBNull(1))
  var d1 = dr.GetDateTime("DateColName1");
if(!dr.IsDBNull(2))
  var d2 = dr.GetDateTime("DateColName2");
date_open.DisplayDate = d1;
Date_Joining.DisplayDate = d2;

<强>更新 诊断...

string Query = "Select date_open from Customer_New where Cust_Id='" + val + "'  ";
/* your code */
while(dr.Read()){
    var dt_obj = dr[0];
    var bt = Convert.ToDateTime(dt_obj);
}