0

datetime 値をデータテーブルに挿入し、oledbdataadapter の update(datatable) メソッドを使用してデータベースにロードしようとしていますが、「条件式でデータ型が一致しません」というメッセージが表示され続けます。エラー。私のアクセス 表のデータ型は次のとおりです。

ID Number
Nombre_Proyecto Text
Codigo_Ine_Proy Text
Cliente text
Fecha_Creacion Datetime (short date) 

アクセスによると、短い日付はmm/dd/yyyですが、datetime/toshortdatestringメソッドに適合しますか? 少なくともそう思います。

どんな助けでも大歓迎です。これが私のコードです:

データ アダプターの OledbCommand を挿入します。

  sql = "PARAMETERS [@Fecha_Creacion] datetime;INSERT Into [Proyectos] ([ID], [Nombre_Proyecto],[Codigo_Ine_Proy],[Cliente],[Fecha_Creacion]) Values (@ID,@Nombre_Proyecto,@Codigo_Ine_Proy,@Cliente,@Fecha_Creacion)";
  Comando = new OleDbCommand(sql, conn);
  Comando.Parameters.Add("@Nombre_Proyecto", OleDbType.VarWChar, 500, "Nombre_Proyecto");
  Comando.Parameters.Add("@Codigo_Ine_Proy", OleDbType.VarWChar, 500, "Codigo_Ine_Proy");
  Comando.Parameters.Add("@Cliente", OleDbType.VarWChar, 500, "Cliente");
  Comando.Parameters.Add("@Fecha_Creacion", DbType.DateTime);
  Comando.Parameters.Add("@ID", OleDbType.Integer, 10000, "ID");

データテーブルにデータ行を作成する部分:

  DataRow newRow = Tabla_Proyectos_BD_General.NewRow();
  Max_IDs["Proyectos"] += 1;
  newRow["ID"] = Max_IDs["Proyectos"];
  newRow["Nombre_Proyecto"] = textBox2.Text;
  newRow["Codigo_Ine_Proy"] = textBox1.Text;
  newRow["Cliente"] = textBox3.Text;
  string x = System.DateTime.Now.ToShortDateString();
  newRow["Fecha_Creacion"] = x;
  Tabla_Proyectos_BD_General.Rows.Add(newRow);
4

2 に答える 2

0
string x = System.DateTime.Now.ToShortDateString();

日時ではなく文字列です!したがって、ミスマッチです。

newRow["Fecha_Creacion"] = System.DateTime.Now;

そして、パラメータ化されたクエリはそれを行うだけです。

そこに入力した日付を shortdatestring 形式で表示したい場合 (書式設定を行う PC にあるものは何でも、日時として取得し、必要に応じて書式設定します。

PS 日付を文字列としてデータベースに渡したい場合は、yyyy-MM-dd または yyyyMMdd の形式を使用してください。普遍的で明確な日付形式以外は、発生するのを待っている単なるバグであり、必要がない限り決して実行しないでください。

ヒント 日付を出力するときは、何らかの形式の文字列に変換するのが最後の操作です。入力するときは、文字列から日時に変換するのが最初に行う必要があります。

コメント後に編集最も簡単な解決策は

Commando.Parameters.Add("@Fecha_Creacion", DbType.DateTime, System.DateTime.Now);

于 2012-02-01T00:06:45.800 に答える
0

あなたはただ使うべきです

newRow["Fecha_Creacion"] = System.DateTime.Now;

アクセスで表示されるのは、「フォーマットされた日付」です。OleDB を介して対話する場合は、書式設定された文字列ではなく、DateTime を使用する必要があります。

于 2012-02-01T00:09:16.260 に答える