0

我想从 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()){
        date_open.DisplayDate = Convert.ToDateTime(dr.GetString(0));
       Date_Joining.DisplayDate = Convert.ToDateTime(dr.GetString(1));     
        txt_Title.Text = dr.GetString(3);
    }                
    sqlitecon.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

但它给出了错误specified cast is not valid。直到现在下面给出的两个解决方案都没有工作

4

2 回答 2

0

异常可能是由 引发的,SQLiteDataReader因为它无法将字段值转换为字符串(可能是DBNull)。如果表中有可空字段,请先使用该IsDBNull函数检查空值,然后再尝试读取值。 Convert.ToDateTime()引发FormatException错误。

于 2013-10-09T17:20:02.560 回答
0

当您尝试从数据库表中读取数据时,一个好的做法是仅检索后续代码真正需要的列。在您的示例中,您从表中检索所有内容。这些列按照它们在数据表中出现的顺序返回。这意味着第一列应该是 date_open 的值,第二列是 data_join 的值。

可能更好的方法是在选择查询中明确说出列的名称,使用 Cust_ID 搜索键的参数并使用阅读器的 GetDateTime,而不是将 all 转换为字符串,然后再转换为日期。

在此示例中,我假设您的表中有三列名为dateopen, datajoin and title. 你应该使用你的真实姓名。

try
{
     sqlitecon.Open();
     string Query = "Select dateopen, datejoin, title from Customer_New where Cust_Id=@id";
     SQLiteCommand createCommand = new SQLiteCommand(Query, sqlitecon);
     createCommand.Parameters.AddWithValue("@id", val);
     SQLiteDataReader dr = createCommand.ExecuteReader();
     while(dr.Read())
     {
        // If there is the possibility of a NULL field then protect the assignement
        // with a check for DBNull.Value before the assignement
        if(!dr.IsDBNull(0))
            date_open.DisplayDate = dr.GetDateTime(0));
        if(!dr.IsDBNull(1))
            Date_Joining.DisplayDate = dr.GetDateTime(1));     
        if(!dr.IsDBNull(2))
            txt_Title.Text = dr.GetString(2);
    }                
    sqlitecon.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
于 2013-10-09T17:24:19.207 回答