このサイトで他の質問を確認しましたが、解決策はありませんでした。C#Access:INSERT SQL文の条件式エラーのデータ型の不一致
C#でSQLを使用して、新しいレコードをローカルAccessデータベースに挿入しようとしています。現在、実行時にthisエラーが発生しています。
フル方法:
public static void AddNewMusicFile(MusicFile m)
{
long newID;
int genreID = GenreDB.GetGenreID(m.AUDFIL_GENRE_NM);
String strSQL = String.Empty;
OleDbTransaction transaction = null;
OleDbCommand cm = new OleDbCommand();
OleDbConnection cn = new OleDbConnection(strConnString);
cm.Connection = cn;
cn.Open();
transaction = cn.BeginTransaction();
cm.Connection = cn;
cm.Transaction = transaction;
strSQL = "INSERT INTO AUDIOFILES_MSTR ";
strSQL += "(";
strSQL += "AUDFIL_TT, ";
strSQL += "AUDFIL_RELEASE_DTM, ";
strSQL += "AUDFIL_LENGTH, ";
strSQL += "AUDFIL_GENRE_ID, ";
strSQL += "AUDFIL_TYPE_ID, ";
strSQL += "AUDFIL_ADD_DTM, ";
strSQL += "AUDFIL_STAT_CD ";
strSQL += ") VALUES (";
strSQL += "@AUDFIL_TT, ";
strSQL += "@AUDFIL_RELEASE_DTM, ";
strSQL += "@AUDFIL_LENGTH, ";
strSQL += "@AUDFIL_GENRE_ID, ";
strSQL += "@AUDFIL_TYPE_ID, ";
strSQL += "@AUDFIL_ADD_DTM, ";
strSQL += "@AUDFIL_STAT_CD ";
strSQL += ")";
cm.CommandText = strSQL;
OleDbParameter pm = new OleDbParameter("@AUDFIL_TT", OleDbType.Char, 163);
pm.Direction = ParameterDirection.Input;
pm.Value = m.AUDFIL_TT;
cm.Parameters.Add(pm);
pm = new OleDbParameter("@AUDFIL_RELEASE_DTM", OleDbType.Date);
pm.Direction = ParameterDirection.Input;
pm.Value = m.AUDIL_RELEASE_DTM;
cm.Parameters.Add(pm);
pm = new OleDbParameter("@AUDFIL_LENGTH", OleDbType.Integer);
pm.Direction = ParameterDirection.Input;
pm.Value = m.AUDFIL_LENGTH;
cm.Parameters.Add(pm);
pm = new OleDbParameter("@genreID", OleDbType.Integer);
pm.Direction = ParameterDirection.Input;
pm.Value = genreID;
cm.Parameters.Add(pm);
pm = new OleDbParameter("@AUDFIL_TYPE_ID", OleDbType.Integer);
pm.Direction = ParameterDirection.Input;
pm.Value = m.AUDFIL_TYPE_ID;
cm.Parameters.Add(pm);
pm = new OleDbParameter("@AUDFIL_ADD_DTM", OleDbType.Date);
pm.Direction = ParameterDirection.Input;
pm.Value = m.AUDFIL_ADD_DTM;
cm.Parameters.Add(pm);
pm = new OleDbParameter("@AUDFIL_STAT_CD", OleDbType.VarChar, 1);
pm.Direction = ParameterDirection.Input;
pm.Value = 'A';
cm.Parameters.Add(pm);
cm.ExecuteNonQuery();
cm.CommandText = "SELECT @@IDENTITY AS AUDFIL_ID;";
newID = int.Parse(cm.ExecuteScalar().ToString());
strSQL = "INSERT INTO MUSICFILES_SPLM ";
strSQL += "(";
strSQL += "AUDFIL_ID, ";
strSQL += "MSC_ARTIST_NM, ";
strSQL += "MSC_ALBUM_NM, ";
strSQL += "MSC_PRODUCER_NM, ";
strSQL += "MSC_LABEL_NM ";
strSQL += ") VALUES (";
strSQL += "@AUDFIL_ID, ";
strSQL += "@MSC_ARTIST_NM, ";
strSQL += "@MSC_ALBUM_NM, ";
strSQL += "@MSC_PRODUCER_NM, ";
strSQL += "@MSC_LABEL_NM ";
strSQL += ")";
cm.CommandText = strSQL;
pm = new OleDbParameter("@AUDFIL_ID", OleDbType.Integer);
pm.Direction = ParameterDirection.Input;
pm.Value = newID;
cm.Parameters.Add(pm);
pm = new OleDbParameter("@MSC_ARTIST_NM", OleDbType.Char, 50);
pm.Direction = ParameterDirection.Input;
pm.Value = m.MSC_ARTIST_NM;
cm.Parameters.Add(pm);
pm = new OleDbParameter("@MSC_ALBUM_NM", OleDbType.Char, 163);
pm.Direction = ParameterDirection.Input;
pm.Value = m.MSC_ALBUM_NM;
cm.Parameters.Add(pm);
pm = new OleDbParameter("@MSC_PRODUCER_NM", OleDbType.Char, 50);
pm.Direction = ParameterDirection.Input;
pm.Value = m.MSC_PRODUCER_NM;
cm.Parameters.Add(pm);
pm = new OleDbParameter("@MSC_LABEL_NM", OleDbType.Char, 30);
pm.Direction = ParameterDirection.Input;
pm.Value = m.MSC_LABEL_NM;
cm.Parameters.Add(pm);
cm.ExecuteNonQuery();
transaction.Commit();
}
トランザクションがコミットされる前にエラーが最後cm.ExecuteNonQuery()
でトリガされます。
私はにデータを追加しようとしている表では、このいずれかになります。
音楽ファイルオブジェクトを作成し、Addメソッドを呼び出し方法:私が持っている
private void btnAdd_Click(object sender, EventArgs e)
{
MusicFile m = new MusicFile();
m.MSC_ARTIST_NM = txtArtist.Text;
m.MSC_ALBUM_NM = txtAlbum.Text;
m.MSC_PRODUCER_NM = txtProducer.Text;
m.MSC_LABEL_NM = txtLabel.Text;
m.AUDFIL_TT = txtTitle.Text;
m.AUDIL_RELEASE_DTM = dtpReleaseDate.Value;
m.AUDFIL_TYPE_ID = 1;
m.AUDFIL_LENGTH = (((long)nudHours.Value * 3600) + ((long)nudMinutes.Value * 60) + (long)nudSeconds.Value);
m.AUDFIL_GENRE_NM = cbxGenre.SelectedItem.ToString();
m.AUDFIL_ADD_DTM = Convert.ToDateTime(DateTime.Now.ToShortDateString());
AudioBaseDB.AddNewMusicFile(m);
MessageBox.Show("Record Added Successfully");
}
これに2,3時間かかっていて、どのパラメータがエラーを引き起こしているのか見つけることができません。
先頭へ戻るスキーマを表示することができます – maSTAShuFu
最初のSQLは失敗すると思います。 @AUDFIL_GENRE_IDの値を指定していません。 –