C# vs. SQL script

C# vs. SQL script
2007-10-09T18:42:11+02:00
2007-10-10T17:48:06+02:00
2022-11-06T05:35:38+01:00
M1rage
Sziasztok!

Problémám a következő:

Egy sql script futtatását kell "automatizálnom", az eredményt excel-ben formázni stbstb. A funkcionalitás tesztelése során sikerül végre eljutni a script futtatásáig is. Az egyszerűség kedvéért, legyen a script:
DECLARE @Bla CHAR(2) SELECT @Bla = '1' select * from MyTable where MyId=600000
(Természetesen a MyId=600000 record létezik.)

Ezt a scriptet ő tárolja:
string p_strCommandText="";

És itt kerül felhasználásra:
//execute command using (OdbcCommand l_dbCommand = new OdbcCommand(p_strCommandText)) { l_dbCommand.Connection = m_dbConnection; OdbcDataAdapter l_dbAdapter=new OdbcDataAdapter(l_dbCommand); try { l_dbAdapter.Fill(p_dtResultSet); } catch (Exception ex) { ErrorProvider(l_dbCommand, ex); } }

Namost rendszeresen 0 sor az eredmény, mert -amitől féltem- a változó értékadásánál
(
SELECT @Bla = '1'
) feltételezem visszatér az OdbcCommand, és köszöni szépen. Namost, nekem azt kellene megoldanom (vagy épp Nektek, és amennyiben lehetséges), hogy az értékadásnál ne térjen vissza az OdbcCommand, hanem az adapter a MyTable megfelelő sorát pakolja be az adattáblába.
Szánom-bánom bűnöm, nem tudom a megoldást.
Mutasd a teljes hozzászólást!
Előre bocsátom, hogy a pontra nem tartok igényt, mindössze maradjon fellelhető a topic.

Ősmagyar nyelven szólva, a következő workaround-ot találtam:

Az olvasandó tábla oszlopszáma nem ismert, ezért kell a varia az DataTable "inicializálással". Egy progtárs adott egy fülest, amiből arra következtettem, hogy a DataAdapter-rel ítéletnapig szórakozhatok, szóval -sajnos- váltanom kellett DataReader-re. Az eredmény alább látható:

//execute command (target table columncount unknown) using (OdbcCommand l_dbCommand = new OdbcCommand(p_strCommandText)) { l_dbCommand.Connection = m_dbConnection; OdbcDataReader l_dbReader = null; try { l_dbReader = l_dbCommand.ExecuteReader(); for (int i = 0; i < l_dbReader.FieldCount; i++) p_dtResultSet.Columns.Add(l_dbReader.GetName(i)); object[] l_objArray = new object[l_dbReader.FieldCount]; while (l_dbReader.Read()) { l_dbReader.GetValues(l_objArray); p_dtResultSet.Rows.Add(l_objArray); } } catch (Exception ex) { ErrorProvider(l_dbCommand, ex); } finally{l_dbReader.Close();} }

Működik.
Mutasd a teljes hozzászólást!

  • SELECT helyett SET az értékadáshoz:
    SET @Bla = '1'
    (Csak ötlet, nem próbáltam)
    Mutasd a teljes hozzászólást!
  • Köszi, megnézem mihelyst..
    Mutasd a teljes hozzászólást!
  • Előre bocsátom, hogy a pontra nem tartok igényt, mindössze maradjon fellelhető a topic.

    Ősmagyar nyelven szólva, a következő workaround-ot találtam:

    Az olvasandó tábla oszlopszáma nem ismert, ezért kell a varia az DataTable "inicializálással". Egy progtárs adott egy fülest, amiből arra következtettem, hogy a DataAdapter-rel ítéletnapig szórakozhatok, szóval -sajnos- váltanom kellett DataReader-re. Az eredmény alább látható:

    //execute command (target table columncount unknown) using (OdbcCommand l_dbCommand = new OdbcCommand(p_strCommandText)) { l_dbCommand.Connection = m_dbConnection; OdbcDataReader l_dbReader = null; try { l_dbReader = l_dbCommand.ExecuteReader(); for (int i = 0; i < l_dbReader.FieldCount; i++) p_dtResultSet.Columns.Add(l_dbReader.GetName(i)); object[] l_objArray = new object[l_dbReader.FieldCount]; while (l_dbReader.Read()) { l_dbReader.GetValues(l_objArray); p_dtResultSet.Rows.Add(l_objArray); } } catch (Exception ex) { ErrorProvider(l_dbCommand, ex); } finally{l_dbReader.Close();} }

    Működik.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd