Avatar billede haolan Nybegynder
11. september 2008 - 14:36 Der er 4 kommentarer og
1 løsning

c# og MySQL stored procedure indsætter kun 1 row

Hej. Som overskriften siger.

Min stored procedure ser sådan ud:

CREATE DEFINER=`root`@`%` PROCEDURE `createFarm`(IN farmid INT)
BEGIN
    DECLARE number INT;
    SELECT COUNT(*) INTO number FROM farm WHERE farmId = farmid;

    IF number = 0 THEN
            INSERT INTO farm (farmId) VALUES (farmid);

    END IF;
END

Og min kode ser sådan ud:

        public bool Insert(FarmAssData farmAssData)
        {
            con.Open();
            MySqlCommand cmd = new MySqlCommand("createFarm", con);

            MySqlTransaction trans;
            trans = con.BeginTransaction();

            cmd.Connection = con;
            cmd.Transaction = trans;

            try
            {
                cmd.Parameters.Add(new MySqlParameter("farmid", farmAssData.AccountCode));
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.ExecuteNonQuery();
                trans.Commit();
            }
            catch (Exception e)
            {
                try
                {
                    trans.Rollback();
                }
                catch (MySqlException MyEx)
                {
                    if (trans.Connection != null)
                        throw new Exception("An error occured while trying to rollback: " + MyEx.Message);
                }

                throw e;
            }
            finally
            {               
                con.Close();
            }

            return true;
        }


Jeg køre insert metoden en masse gange i en løkke et andet sted fra, men det er kun den første row der bliver indsat i databasen.

Nogen der kan forklare hvorfor?
Jeg giver de mange points fordi det haster..
Avatar billede aaberg Nybegynder
11. september 2008 - 14:51 #1
Jeg har et forslag:

I querien:
SELECT COUNT(*) INTO number FROM farm WHERE farmId = farmid;

hedder kolonnen og parameteren det samme (mySQL er ikke case-sensitiv), så ignorerer den parameteren. Så det du egentlig skriver er:
SELECT COUNT(*) INTO number FROM farm WHERE minKolonne = minKolonne;

Prøv at ændre navn på farmid parameteren.
Avatar billede aaberg Nybegynder
11. september 2008 - 14:53 #2
Jeg har aldrig arbejdet med mySQL, men har gjort samme fejl 100 gange i Oracle.
Avatar billede arne_v Ekspert
13. september 2008 - 20:11 #3
Derudover skal parameternavnet nok prefixes med et spoergsmaalstegn.
Avatar billede haolan Nybegynder
14. september 2008 - 12:56 #4
jeg har prefixet...Tak for hjælpen aaberg_cc, det var lige netop der problemet lå :)

Smid svar for points..
Avatar billede aaberg Nybegynder
14. september 2008 - 13:13 #5
svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester