C# sql szerverre adatírás, módosítás probléma.
2019-10-09T16:31:30+02:00
2019-10-10T13:45:38+02:00
2022-08-11T15:20:30+02:00
brucky1
Sziasztok!

Kezdő vagyok, és csak hobbi szinten űzöm ezt a "sportot".
Segítséget szeretnék kérni.

A problémám egy 2014-es sql express szerverrel és a hozzá kapcsolódó programmal van. Ha a programot a szerver gépen használom, akkor semmi gond, minden nagyon jól működik. Ha egy másik gépről használom, ip-n keresztül bejelentkezve akkor gyakran használhatatlan és új sor beszúrásakor, vagy sor módosításakor, a "String or binary data would be truncated. The statement has been terminated" üzenetet küldi. De nem mindig, és csak kizárólag másik gépről. A szerver gépen található programmal ugyanezt az adatot simán beilleszti.

Remélem jó helyre írtam a kérdést és előre is köszönöm a segítséget.
Mutasd a teljes hozzászólást!
A tippem elsőre az, hogy a begépelt karakterek száma több, mint az adatbázisban erre a célra fenntartott oszlop befogadni képes. Ezzel elsőre nem biztos, hogy kijön a hiba. Arra gondolok, hogy a kliens oldalon a karakterkódolás nem ugyan az mint a szerveren, így látszólag ugyanannyi karakter van, de 2x annyi bájton. Azt nézd meg, hogy az adatbázisban az adott column (string) mennyit tud. Növeld meg. Próbáld annyi karakterrel, ami már hibát dob. Állítsd át nagyobbra az SQL-ben és próbáld újra.

Természetesen csak akkor igaz ez, ha szövegnél jön ez a hiba.

Ötlet, hátha bejön.
Mutasd a teljes hozzászólást!

  • Szia!

    Milyen adattípus? Szöveg?
    Mutasd a teljes hozzászólást!
  • A tippem elsőre az, hogy a begépelt karakterek száma több, mint az adatbázisban erre a célra fenntartott oszlop befogadni képes. Ezzel elsőre nem biztos, hogy kijön a hiba. Arra gondolok, hogy a kliens oldalon a karakterkódolás nem ugyan az mint a szerveren, így látszólag ugyanannyi karakter van, de 2x annyi bájton. Azt nézd meg, hogy az adatbázisban az adott column (string) mennyit tud. Növeld meg. Próbáld annyi karakterrel, ami már hibát dob. Állítsd át nagyobbra az SQL-ben és próbáld újra.

    Természetesen csak akkor igaz ez, ha szövegnél jön ez a hiba.

    Ötlet, hátha bejön.
    Mutasd a teljes hozzászólást!
  • Szöveg is és szám is. Vegyesen.
    Mutasd a teljes hozzászólást!
  • Értem ezt a karakterek száma dolgot. De! 
    Az a helyzet, hogy ha egy üres sort szeretnék beszúrni, akkor is ezt a hibát küldi. De csak akkor csinálja, ha a program nem azon a gépen van, mint az sql szerver. És miért működik néha rendesen? És miért működik ugyanez a program mindig helyesen, ha azonos gépen van az sql szerverrel? Tehát csak akkor van hiba, ha nem a szerver gèpén fut a program.
    Router, internet kapcsolat nem okozhatja?
    Mutasd a teljes hozzászólást!
  • Nem tudom pontosan mi okozza. A két gép azonos oprendszerrel van telepítve? Azaz mindegyik MS Windows, vagy egyéb? A lényeg, hogy különböznek vagy sem?

    Arra gondolok, hogy már a soremelés sem azonos a két oprendszernél. Sima enterrel elküld az egyik 10 13 karaktereket, a másik meg nem, illetve a space-nek látszódó 0 karakter az tényleg 0 nem a 32-s ASCII kódú valódi space. Az adatbázis meg nem szereti a 0-t.

    Azonban számoknál nem kellene előfordulnia. Hacsak nem 32-64 bit okozta gond lehet. Arra gondolok, hogy az adatbázis float-típusa nem egyezik meg a kliens által küldöttel.

    Esetleg területi és nyelvi beállításokban keresendő a hiba. Sajnos több ötletem nincs, nem látjuk a kódot. 

    A szövegnek meg nem árt, ha ugyan olyan a karakterkódolása mindenhol.
    Mutasd a teljes hozzászólást!
  • Minden gép Windows, legfeljebb a verzió változik. Nem tudom számít-e, de az adatbázis "Collation" Hungarian_CI_AS.
    Pl ez a részlet is produkálja időnként a hibát:
                using (SqlConnection sqlconn = new SqlConnection(valtozok.kapcsolat))
                {
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        cmd.Connection = sqlconn;
                        cmd.CommandType = CommandType.Text;
                        cmd.Parameters.AddWithValue("@objektumSorId", objektumMaxSorId);
                        cmd.Parameters.AddWithValue("@objektumId", valtozok.objektum_id);
                        cmd.Parameters.AddWithValue("@objektumTipusId", valtozok.tipusid);
                        cmd.Parameters.AddWithValue("@objektumNev", textBoxNev.Text.Trim());
                        cmd.Parameters.AddWithValue("@objektumLetesites", txt_letesitve.Text.Trim());
                        cmd.Parameters.AddWithValue("@objektumKataszter", txt_kataszter.Text.Replace(",", "."));
                        cmd.Parameters.AddWithValue("@objektumEovx", txt_eovx.Text.Replace(",", "."));
                        cmd.Parameters.AddWithValue("@objektumEovy", txt_eovy.Text.Replace(",", "."));
                        cmd.Parameters.AddWithValue("@objektumGeomag", txt_magassag.Text.Replace(",", "."));
                        cmd.Parameters.AddWithValue("@objektumNyugviz", txt_nyugalmi.Text.Replace(",", "."));
                        cmd.Parameters.AddWithValue("@objektumUzviz", txt_uzemi.Text.Replace(",", "."));
                        cmd.Parameters.AddWithValue("@objektumHely", txt_hrsz.Text.Trim());
                        cmd.Parameters.AddWithValue("@objektumMelyseg", txt_melyseg.Text.Replace(",", "."));
                        cmd.Parameters.AddWithValue("@objektumKitermelheto", txt_kitermelheto.Text.Replace(",", "."));
                        cmd.Parameters.AddWithValue("@objektumKitermelt", txt_kitermelt.Text.Replace(",", "."));
                        cmd.Parameters.AddWithValue("@objektumTorolt", "0");
                        cmd.Parameters.AddWithValue("@objektumTorolt1", "1");
                        cmd.Parameters.AddWithValue("@objektumMegjegyzes", Convert.ToString(objektumDs.Tables[0].Rows[0]["objektumMegjegyzes"]));
                        cmd.Parameters.AddWithValue("@objektumVizkezeles", Convert.ToString(objektumDs.Tables[0].Rows[0]["objektumvizkezeles"]));
                        cmd.Parameters.AddWithValue("@objektumTelepulesId", Convert.ToString(objektumDs.Tables[0].Rows[0]["objektumTelepulesId"]));
                        cmd.Parameters.AddWithValue("@objektumSzivattyuId", szivattyuId);
                        cmd.Parameters.AddWithValue("@objektumVizoraId", vizoraId);
                        cmd.Parameters.AddWithValue("@objektumAtTipus", DBNull.Value);
                        cmd.Parameters.AddWithValue("@objektumAtmero", DBNull.Value);
                        cmd.Parameters.AddWithValue("@objektumAtMelyseg", DBNull.Value);
                        cmd.Parameters.AddWithValue("@objektumAtNyomas", DBNull.Value);
                        cmd.Parameters.AddWithValue("@objektumAtViztermeles", DBNull.Value);
                        cmd.Parameters.AddWithValue("@objektumAtTartalymeret", DBNull.Value);
                        cmd.Parameters.AddWithValue("@objektumNyomasBe", DBNull.Value);
                        cmd.Parameters.AddWithValue("@objektumNyomasEl", DBNull.Value);
                        cmd.Parameters.AddWithValue("@objektumUser", valtozok.mssqluser);
                        cmd.Parameters.AddWithValue("@objektumModositva", mentesIdo);

                        sqlconn.Open();
                        SqlTransaction sqlTran = sqlconn.BeginTransaction();
                        cmd.Transaction = sqlTran;
                        try
                        {
                            cmd.CommandText = "INSERT INTO " + valtozok.mssqluser + "_OBJEKTUMOK_VIEW (objektumSorId, objektumId, objektumTipusId, objektumNev, objektumLetesites, objektumKataszter, " +
                                "objektumEovx, objektumEovy, objektumGeomag, objektumNyugviz, objektumUzviz, objektumHely, objektumMelyseg, objektumKitermelheto, " +
                                "objektumKitermelt, objektumTorolt, objektumMegjegyzes, objektumVizkezeles, objektumTelepulesId, objektumSzivattyuId, " +
                                "objektumVizoraId, objektumAtTipus, objektumAtmero, objektumAtMelyseg, objektumAtNyomas, objektumAtViztermeles, " +
                                "objektumAtTartalymeret, objektumNyomasBe, objektumNyomasEl, objektumUser, objektumModositva) " +
                                "VALUES " +
                                "(@objektumSorId, @objektumId, @objektumTipusId, @objektumNev, @objektumLetesites, @objektumKataszter, " +
                                "@objektumEovx, @objektumEovy, @objektumGeomag, @objektumNyugviz, @objektumUzviz, @objektumHely, @objektumMelyseg, @objektumKitermelheto, " +
                                "@objektumKitermelt, @objektumTorolt, @objektumMegjegyzes, @objektumVizkezeles, @objektumTelepulesId, @objektumSzivattyuId, " +
                                "@objektumVizoraId, @objektumAtTipus, @objektumAtmero, @objektumAtMelyseg, @objektumAtNyomas, @objektumAtViztermeles, " +
                                "@objektumAtTartalymeret, @objektumNyomasBe, @objektumNyomasEl, @objektumUser, @objektumModositva) " ;

                            int recordsAffected = cmd.ExecuteNonQuery();

                            cmd.CommandText = "UPDATE " + valtozok.mssqluser + "_OBJEKTUMOK_VIEW SET objektumTorolt = '1', objektumUser = '" + valtozok.mssqluser + "', objektumModositva = '" + mentesIdo + "' WHERE objektumSorId = " + valtozok.objektumSorId;

                            int recordsAffected1 = cmd.ExecuteNonQuery();
                            sqlTran.Commit();
                        }
                        catch (Exception hiba)
                        {
                            try
                            {
                                sqlTran.Rollback();
                            }
                            catch (Exception exRollback)
                            {
                                MessageBox.Show(exRollback.Message);
                            }
                            MessageBox.Show(hiba.Message);
                        }
                        finally
                        {
                            sqlconn.Close();
                        }
                    }

                }
    Mutasd a teljes hozzászólást!
  • A kliens gépre rendesen fel van rakva az 2014-es sql server client...?
    Mutasd a teljes hozzászólást!
  • Úgy néz ki, megoldódott a probléma a mezők hosszának megnövelésével. Ami egyszer elég volt, máskor ugyanannak az adatnak ugyanarról a gépről már nem.

    Köszönöm a segítséget!
    Mutasd a teljes hozzászólást!
abcd