webForumDet fria alternativet

Typblandsningfel i villkorsytryck Datareader

.NET

21 svar · 436 visningar · startad av Prästen

Medlem sedan dec. 2000537 inlägg
Frågan#1

OleDbCommand objCommand=new OleDbCommand("SELECT * FROM Orter WHERE nr=302", objConnection);

OleDbDataReader objDataReader=null;
objConnection.Open();
objDataReader=objCommand.ExecuteReader();

och den klagar på
objDataReader=objCommand.ExecuteReader();

får:Exception Details: System.Data.OleDb.OleDbException: Typblandningsfel i villkorsuttryck.

men om jag istället bara ändrar SQL satsen till
"SELECT * FROM Orter"

så funkar det, jag använder Webmatrix, kan det vara så att den är buggig och inte kan kompilera eller nåt sånt?, eftersom jag har haft väldigt många underlig fel på sistone, där ena sekunden funkar det men andra sek inte??.

Medlem sedan dec. 20003 887 inlägg
#2

Kontrollera så att kolumnen nr verkligen är av rätt typ, så det inte är Text eller annat dumt...

Medlem sedan dec. 2000537 inlägg
#3

Juuuust, kom på det precis ;) ;) . heheh, tack ändå kompis.

Medlem sedan dec. 20003 887 inlägg
#4

Varsågod.

Medlem sedan sep. 20026 425 inlägg
#5

Något som alltid är bra att göra, och som jag tycker att man ska ha som regel på en sida som ansluter till en databas, är att lägga SQL-satsen i en variabel, exempelvis en variabel med namnet SQL. Ur felsökningssynpunkt blir det oerhört mycket lättare att felsöka, då man kan skriva ut variabeln SQL och kolla om den gör det som förväntas att den ska göra. Alltså, använd

string SQL = "SELECT falt1,falt2,.... FROM tabell";
OleDbCommand objCommand=new OleDbCommand(SQL, objConnection);

i stället för

OleDbCommand objCommand=new OleDbCommand("SELECT falt1,falt2,.... FROM tabell", objConnection);
Medlem sedan mars 20023 561 inlägg
#6

Eller så använder man Stored Procedures...

Medlem sedan mars 20021 889 inlägg
#7

m_soderlund skrev:

Ur felsökningssynpunkt blir det oerhört mycket lättare att felsöka, då man kan skriva ut variabeln SQL och kolla om den gör det som förväntas att den ska göra.

Det går bra utan den "klassiska klassisk-ASP-metoden" Response.Write("strSQL"). Det går bra att använda try- och catch-block och eventuellt skriva ut information genom metoder i klassen OdbcCommand el dyl. På så sätt slipper man några sekunders onödigt arbete.

:)

Medlem sedan dec. 20003 887 inlägg
#8

Josef skrev:

Eller så använder man Stored Procedures...

Förutsatt att man inte kör mot en Accessdatabas x(

Medlem sedan sep. 20011 914 inlägg
#9

Du kan väl köra sp i Access, fast där kallas de frågor.

Medlem sedan dec. 20003 887 inlägg
#10

En Accessdatabas (.mdb) hanterar inte Stored procedures och en fråga/query är inte samma sak.

Medlem sedan sep. 20011 914 inlägg
#11

Och men detta funkar iaf vare sig det är en sp eller inte.

I access skapas en fråga som heter "testquery":

SELECT * FROM Orter WHERE nr = @NR

och lite slarvkodat så kan koden se ut så här:

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb");

OleDbCommand cmd = new OleDbCommand("testquery", conn);
cmd.CommandType = CommandType.StoredProcedure;
OleDbParameter p = new OleDbParameter();
p = cmd.Parameters.Add("@ID", OleDbType.Integer);
p.Direction = ParameterDirection.Input;
p.Value = Convert.ToInt32([i]Därifrån_du får_numret[/i]);

conn.Open();
dgTest.DataSource = cmd.ExecuteReader();
dgTest.DataBind();
conn.Close();
Medlem sedan dec. 20003 887 inlägg
#12

Jag erkänner mig förvirrad. :l

Hur mycket kan man jämföra en sp i SQL Server och en query i Access? Jag vet att jag läst att Access inte stödjer sp, så även om det kan vara mycket praktiskt att kunna använda sig av t.ex. ditt kodexempel, Dino, så måste det väl bli galet någonstans... eller tolkar/översätter Access/OleDb CommandType.StoredProcedure till något i stil med "Query exists in .mdb"?

Medlem sedan juli 20022 537 inlägg
#13

Det går bra att köra frågorna som SP.
Här kan du se ett exempel där jag har gjort det..
http://www.aspsidan.nu/default.asp?page=readArticle&menu=2&aId=108

Medlem sedan dec. 20003 887 inlägg
#14

Vimp skrev:

Det går bra att köra frågorna som SP.
Här kan du se ett exempel där jag har gjort det..
http://www.aspsidan.nu/default.asp?page=readArticle&menu=2&aId=108

Man tackar för det exemplet Vimp.

Jag är dock fortfarande förvirrad över hur Access hanterar en SP.

Medlem sedan sep. 20011 914 inlägg
#15

Engine^ skrev:

Jag är dock fortfarande förvirrad över hur Access hanterar en SP.

Kalla in LarsG. :i

Medlem sedan dec. 20003 887 inlägg
#16

Dino skrev:

Engine^ skrev:

Jag är dock fortfarande förvirrad över hur Access hanterar en SP.

Kalla in LarsG. :i

Medlem sedan juli 20022 537 inlägg
#17

Jag har hört att det ska gå segare om man kör SP i Access.
Vet dock ej om det stämmer.

:)

Medlem sedan dec. 200012 464 inlägg
#18

God morgon.

Som sagt så har Access stöd för en form av lagrade procedurer

 CREATE PROCEDURE ProcedureName
   (Parameter1 datatype, ...) AS
   SQLStatement

Man kan alltså ha parametrar och ett statement. Det finns inget stöd för lokala variabler eller flödeskontroll.

Procedurerna är inte förkompilerade. Vid exekvering av en procedur så hämtas definitionen som sedan kompileras. Det blir alltså långsammare än att själv bygga ihop motsvarande sql-sats och exekvera den direkt.

Medlem sedan sep. 20026 425 inlägg
#19

Tackar, LarsG! Det där klarade ut en del för mig och förhoppningsvis andra också. :bire

Medlem sedan dec. 20003 887 inlägg
#20

Ok, det går alltså att använda CREATE PROCEDURE i Access, men det är bara dumt. Min förvirring är som bortblåst :)

Hanteras en färdig Query i Access på samma sätt om man anger den som SP?

Känns som om det är lika bra att fortsätta fråga i den här tråden även om det inte har med rubriken att göra...

262 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)