Forum » Programiranje » [C# + Access07] Ne prebere ID-ja
[C# + Access07] Ne prebere ID-ja
golobich ::
Pozdravljeni!
Zanima me če bi mi pomagali pri sledečem problemu. Program mi namreč ne prebere KS_ID, čeprav baza ni prazna in pride do ujemanja v KS_KS, vendar nikjer ne vidim kje sem naredil napako oz. zakaj mi ne prebere KS_IDja.
koda:
Hvala za kakršno koli pomoč.
Lp, golobich ;)
Zanima me če bi mi pomagali pri sledečem problemu. Program mi namreč ne prebere KS_ID, čeprav baza ni prazna in pride do ujemanja v KS_KS, vendar nikjer ne vidim kje sem naredil napako oz. zakaj mi ne prebere KS_IDja.
koda:
//dodamo naslov v bazo query = "SELECT KS_ID FROM tabKS WHERE KS_KS=@ks"; dAdapter.SelectCommand = new OleDbCommand(query, conn); dAdapter.SelectCommand.Parameters.Add("@ks", OleDbType.LongVarChar).Value = txtKS.Text; dataSet.Clear(); dAdapter.Fill(dataSet); query = "INSERT INTO tabNaslovi (NASLOVI_UlicaHisna, NASLOVI_Posta, NASLOVI_KS) VALUES (@ulica, @posta, @ksi)"; dAdapter.InsertCommand = new OleDbCommand(query, conn); dAdapter.InsertCommand.Parameters.Add("@ulica", OleDbType.LongVarChar).Value = txtUlicaHisna.Text; dAdapter.InsertCommand.Parameters.Add("@posta", OleDbType.LongVarChar).Value = cmbPosta.Text; MessageBox.Show(txtKS.Text); MessageBox.Show(dataSet.Tables[0].Rows[0][0].ToString()); dAdapter.InsertCommand.Parameters.Add("@ksi", OleDbType.Integer).Value = dataSet.Tables[0].Rows[0][0]; conn.Open(); dAdapter.InsertCommand.ExecuteNonQuery(); conn.Close();
Hvala za kakršno koli pomoč.
Lp, golobich ;)
win64 ::
Kako preveriš, da pride do ujemanja?
Za branje enega podatka lahko uporabiš ExecuteScalar
http://msdn.microsoft.com/en-us/library...
Za pisanje pa tudi ne potrebuješ adapterja, za oba ukaza lahko uporabiš samo OleDbCommand.
Sicer nevem, če dela to z accesom, vendar bi se ta dva sql stavka dala združiti v enega:
query = "INSERT INTO tabNaslovi (NASLOVI_UlicaHisna, NASLOVI_Posta, NASLOVI_KS) VALUES (@ulica, @posta, (SELECT KS_ID FROM tabKS WHERE KS_KS=@ks))
Za branje enega podatka lahko uporabiš ExecuteScalar
http://msdn.microsoft.com/en-us/library...
Za pisanje pa tudi ne potrebuješ adapterja, za oba ukaza lahko uporabiš samo OleDbCommand.
Sicer nevem, če dela to z accesom, vendar bi se ta dva sql stavka dala združiti v enega:
query = "INSERT INTO tabNaslovi (NASLOVI_UlicaHisna, NASLOVI_Posta, NASLOVI_KS) VALUES (@ulica, @posta, (SELECT KS_ID FROM tabKS WHERE KS_KS=@ks))
golobich ::
win64, sem probal tudi brez tistega @ks in sem samo "limal" niz. Tako da je bila na koncu poizvedba sledeča:
"SELECT KS_ID FROM tabKS WHERE KS_KS='Semic'". To je bil query (sem ga izpisal z MessageBoxom za vsak slučaj).
No in preverim v tabKS če je slučajno kje KS_KS='Semic' in dejansko je. Zadnja vrstica je bila taka in bi se moralo ujemati.
Sem preveril še da ni slučajno v bazi kak odvecen presledek za zadnjo črko in podobnega...in ni. Dejansko mi res ni jasno kako
da je dataSet prazen oz kako da mi ne izbere idja.
Lp, golobich
"SELECT KS_ID FROM tabKS WHERE KS_KS='Semic'". To je bil query (sem ga izpisal z MessageBoxom za vsak slučaj).
No in preverim v tabKS če je slučajno kje KS_KS='Semic' in dejansko je. Zadnja vrstica je bila taka in bi se moralo ujemati.
Sem preveril še da ni slučajno v bazi kak odvecen presledek za zadnjo črko in podobnega...in ni. Dejansko mi res ni jasno kako
da je dataSet prazen oz kako da mi ne izbere idja.
Lp, golobich
KrEn1234 ::
Poskusi za branje raje uporabiti OleDbCommand. Če delaš kakšno resnejšo applikacijo ne uporabljaj takšen način zapiranja povezav na DB. Hitro lahko
ostaneš z odprtimi konekcijami,..
npr:
public void ReadMyData(string myConnString)
{
string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders";
OleDbConnection myConnection = new OleDbConnection(myConnString);
OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection);
myConnection.Open();
OleDbDataReader myReader = myCommand.ExecuteReader();
try
{
while (myReader.Read())
{
Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));
}
}
finally
{
// always call Close when done reading.
myReader.Close();
// always call Close when done reading.
myConnection.Close();
}
ostaneš z odprtimi konekcijami,..
npr:
public void ReadMyData(string myConnString)
{
string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders";
OleDbConnection myConnection = new OleDbConnection(myConnString);
OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection);
myConnection.Open();
OleDbDataReader myReader = myCommand.ExecuteReader();
try
{
while (myReader.Read())
{
Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));
}
}
finally
{
// always call Close when done reading.
myReader.Close();
// always call Close when done reading.
myConnection.Close();
}
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | SQL problemOddelek: Programiranje | 1712 (1330) | win64 |
» | razložitev nekaterij elementov v visual studio 05Oddelek: Programiranje | 2128 (1933) | darkolord |
» | problem v C#Oddelek: Programiranje | 1986 (1701) | dvojka |
» | c# vprasanjeOddelek: Programiranje | 1863 (1542) | user4683 |
» | branje byte[] iz MS access-ove bazeOddelek: Programiranje | 1950 (1860) | BHawk |