Insérez DateTime dans l'Accès
Le problème:
J'essaie d'insérer une date de temps dans une base de données access à l'aide de l'interface Oledb en C#.
Piratage solution: Générer mon sur insérer une chaîne de caractères sans l'aide de la commande.Propriétés
Je peux insérer du texte dans la base de données sans problème, mais lorsque j'essaie de type datetime, je me retrouve avec cette erreur: System.Les données.OleDb.OleDbException {"type de Données incompatible dans l'expression des critères."}
Il y a plusieurs postes de semblable à cela, mais hélas pas de solution de travail.
Voici mon code:
void TransferData()
{
string instCmd = Get_InsertCommand(0); //hard coded table 0 for testing
Fill_ProductTable_ToInsert();
con.Open();
//It would be nice not to have to separate the date indexes
int[] textIndex = { 0, 1, 2, 3, 4, 7 };
int[] dateIndex = { 5, 6 };
try
{
foreach (DataRow row in DataToStore.Tables[0].Rows)
{
OleDbCommand command = new OleDbCommand();
command.Connection = con;
command.CommandText = instCmd;
foreach(int j in textIndex)
command.Parameters.AddWithValue("@" + j, row[j]);
foreach (int j in dateIndex)
{
//TESTING CODE
///////////////////////////////////////////////////////////////////////////
string input = "#\'" +DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") +"\'#";
command.Parameters.AddWithValue("@" + j, input.ToString());
Program.WriteLine(input.ToString());
///////////////////////////////////////////////////////////////////////////
}
command.ExecuteNonQuery();
}
}
finally
{
con.Close();
}
}
string Get_InsertCommand(int i)
{
string sqlIns = "INSERT INTO " + DataToStore.Tables[0].TableName + " (";
string temp = "VALUES (";
for (int j = 0; j < expected_header[i].Length - 1; j++)
{
sqlIns += expected_header[i][j] + ", ";
temp += "@" + j + ", ";
}
int lastIndex = expected_header[i].Length -1;
sqlIns += expected_header[i][lastIndex] + ") ";
temp += "@" + lastIndex + ")";
sqlIns += temp;
return sqlIns;
}
À l'intérieur de la zone appelée " test de code, j'ai essayé de chaque permutation de la date de l'heure à laquelle je pouvais penser.
J'ai essayé tous les formats avec # et'
J'ai essayé l'un de ces formats: aaaa-MM-jj, aaaammjj, aaaa\MM\jj, aaaa/MM/jj
J'ai aussi essayé ToOADate()
Et ToString(), ToShortDateString()
J'ai aussi essayé le réglage de la base de données pour accepter ANSI-92 Sql
Je suis à cours d'idées.
Remarque: Ce code est mis en place pour faire face à de multiples tables à partir de plusieurs bases de données, l'esprit, les boucles...
Vous devez vous connecter pour publier un commentaire.
Utiliser les paramètres correctement, et ne vous inquiétez pas au sujet du format de la valeur datetime vous concaténer dans votre requête.
Je ne comprends pas pourquoi vous voulez convertir la valeur datetime à une chaîne de valeur ?
J'ai été en mesure de résoudre ce problème en n'utilisant pas les propriétés de la commande. J'ai généré mon propre sql d'entrée et de définir à la commande cmd.commandText. La saisie de texte pour le type datetime à une base de données est #aaaa-MM-jj#