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。今のところ、以下に示す2つの解決策は機能していません

4

2 に答える 2

0

データベース テーブルからデータを読み取ろうとするときの良い方法は、後続のコードで本当に必要な列だけを取得することです。あなたの例では、テーブルからすべてを取得します。列は、データテーブルに表示されるのと同じ順序で返されます。これは、最初の列が date_open の値で、2 番目の列が data_join の値であることを意味します。

おそらくより良いアプローチは、選択クエリで列の名前を明示的に言い、Cust_ID 検索キーのパラメーターを使用し、すべてを文字列に変換してから日付に変換する代わりに、リーダーの GetDateTime を使用することです。

この例では、 という名前のテーブルに 3 つの列があるとします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 に答える