Tipi di dati non corrispondenti nell'espressione criterio c# [Access]

lunedì 22 settembre 2008 - 18.56

Terzinaccio Profilo | Newbie

in Access ho questa query
INSERT INTO Ubicazioni ( Nome, fkSedeAzienda )
VALUES (@Nome, @fkSedeAzienda);

e la eseguo con il codice da c#
OleDbCommand cm = new OleDbCommand();
try
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "SP_INSERIMENTOUBICAZIONE";
cm.Parameters.AddWithValue("fkSedeAzienda", mSede.ToString());
cm.Parameters.AddWithValue("Nome", txtName.Text);
cm.Connection = Program.connglobale;
Program.connglobale.Open();
cm.ExecuteNonQuery();


}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Program.NomeProgetto, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (Program.connglobale.State == ConnectionState.Open)
Program.connglobale.Close();
cm.Parameters.Clear();
cm.Dispose();
}

come ho sempre fatto in sql ma mi da errore:
Tipi di dati non corrispondenti nell'espressione criterio.
in effetti SedeAzienda è numerico ma come gli devo passare allora un valore numerico?

Grazie a tutti

Vash Profilo | Junior Member

>in Access ho questa query
>INSERT INTO Ubicazioni ( Nome, fkSedeAzienda )
>VALUES (@Nome, @fkSedeAzienda);

non è che l'errore sta sul nome??
nome se è di tipo string va tra gli apici

freeteo Profilo | Guru

>Tipi di dati non corrispondenti nell'espressione criterio.
>in effetti SedeAzienda è numerico ma come gli devo passare allora
>un valore numerico?
io lo passerei così:
command.Parameters.Add(new OleDbParameter("sede", sede));
se "sede" è un numerico lui si arrangia da solo a creare il parametro con il tipo appropriato (non sempre, vedi le date ma questo è un altro discorso).

La cosa che mi rimane ignota, è che usi OleDb per accedere a sql...come mai non usi il provider SqlClient?
Ovvero SqlConnection, SqlCommand etc...di fatto il provider "nato" per Sql, che è praticamente uguale a livello di programmazione, ma è ottimizzato per sql, quindi ne guadagni di prestazioni...
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Terzinaccio Profilo | Newbie

perchè uso access e non sql...purtroppo per questo uso oledb..almeno cosi sempre mi hanno spiegato...che sqlclient si usa con sql server mentre per access si usa oledb

Terzinaccio Profilo | Newbie

OleDbParameter parametri;
parametri = cm.Parameters.Add("@fkSedeAzienda", OleDbType.Integer);
parametri.Direction = ParameterDirection.Input;
parametri.Value = mSede;

parametri = cm.Parameters.Add("@nome", OleDbType.VarChar, 50);
parametri.Direction = ParameterDirection.Input;
parametri.Value = "'Andrea'";

ho provato anche a mettere cosi ma nulla mi da sempre lo stesso errore...se metto gli apici sulla query poi mi mette sul db @Nome e non il valore!!

freeteo Profilo | Guru

>perchè uso access e non sql...purtroppo per questo uso oledb..almeno
>cosi sempre mi hanno spiegato...che sqlclient si usa con sql
si si è corretto, avevo inteso che parlassi di sql perchè sotto hai scritto "...come ho sempre fatto in sql..." pensavo ti riferissi a sql server.
Cmq, il fatto che ancora non capisco è perchè il tipo di comando hai messo "OledbStoredProcedure" se usi access e quindi le stored non ci sono nemmeno?
Metti il tipo di comando su "Text", ovvero che gli stai passando una stringa sql da eseguire sul database, e riprova.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5