Por que estou recebendo “Incompatibilidade de tipo de dados na expressão de critérios” com este código?[duplicado]

StackOverflow https://stackoverflow.com//questions/22078830

Pergunta

Estou tentando inserir um registro em uma tabela do MS Access com este código:

public void InsertIntoPPTData(string tx, string site_no, string xmlfile, DateTime collect_dttm, string ppt_user, string tx_memo, string file_beg, string file_end)
{
    string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Duckbilled;Password=Platypus;Data Source=C:\RGT\NotSoBigData.MDB;Jet OLEDB:System database=C:\CCRWin\Data\jftfdcsc.mdw";
    using (var conn = new OleDbConnection(connStr))
    {
        using (var cmd = conn.CreateCommand())
        {
            cmd.CommandText = 
                @"INSERT INTO tx_tillermantea (tx, site_no, xmlfile, collect_dttm, ppt_user, tx_memo, file_beg, file_end) 
                  VALUES(@txval, @siteNum, @xmlfileName, @DTNow, @PPTUser, @TXMemo, @strfile_beg, @strfile_end)";
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@txval", tx);
            cmd.Parameters.AddWithValue("@siteNum", site_no);
            cmd.Parameters.AddWithValue("@xmlfileName", xmlfile);
            cmd.Parameters.AddWithValue("@DTNow", collect_dttm);
            cmd.Parameters.AddWithValue("@PPTUser", ppt_user);
            cmd.Parameters.AddWithValue("@TXMemo", tx_memo);
            cmd.Parameters.AddWithValue("@strfile_beg", file_beg);
            cmd.Parameters.AddWithValue("@strfile_end", file_end);
            conn.Open();
            cmd.ExecuteNonQuery();
        }
    }
}

... mas o "cmd.executenonQuery ();" A linha explode com:

System.data.oledb.oledBexception não foi tratado pela mensagem do código do usuário = incompatibilidade do tipo de dados na expressão de critérios.Fonte = Microsoft Office Access Database Motor Stacktrace:at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data. OLEDB.OLEDBCOMMAND.EXECECOMANCE (CommandBeHavior, Object & Executeresult) em System.data.oledb.oledbCommand.exectedereaderinternal (CommandBeHavior, Método String) em System.data.oledb.oledbcommand.executynonquery () em System.data.oledb.oledB.

Meu palpite é que o problema é o único valor DateTime, mas o que há de errado com:

cmd.Parameters.AddWithValue("@DTNow", collect_dttm);

?

Estou passando "DateTime.Now" como o argumento collect_dttm.

Foi útil?

Solução

O link fornecido mostra pelo menos duas soluções para isso;Achei que o mais simples era simplesmente remover o parâmetro DateTime da mixagem e injetar diretamente o valor dateTime de dentro da instrução Insert, substituindo o parâmetro "DTNow" por uma chamada para "Now()" assim:

cmd.CommandText = 
    @"INSERT INTO tx_tillermantea (tx, site_no, xmlfile, collect_dttm, ppt_user, tx_memo, file_beg, file_end) 
      VALUES(@txval, @siteNum, @xmlfileName, Now(), @PPTUser, @TXMemo, @strfile_beg, @strfile_end)";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top