Account Options

  1. Sign in
The old Google Groups will be going away soon.
Switch to the new Google Groups.
Google Groups Home
« Groups Home
SQLBindParameter ,Output, Var char -> warum keine Rückgabe?
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  4 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
thomas kost  
View profile   Translate to Translated (View Original)
 More options Jun 4 2004, 9:48 am
Newsgroups: microsoft.public.de.sqlserver
From: j.hunn...@freenet.de (thomas kost)
Date: 4 Jun 2004 06:48:36 -0700
Local: Fri, Jun 4 2004 9:48 am
Subject: SQLBindParameter ,Output, Varchar -> warum keine Rückgabe?
hallo

ich nutze die ODBC-Funktion SQlBindparameter,MS SQL Server 2000 u
passenden Treiber
habe folgende Beispiel Procedure:

CREATE PROCEDURE [ReadAll] ( @Str varchar(255) OUTPUT)  AS
Set @Str = 'hallo'
GO

und folgenden C++ Code(auszug) (nach SQLPrepare mit "call ReadAll(?)"
)

char buffer[255];                        
long size = sizeof(buffer)  ;        

sqlReturn = SQLBindParameter(StmtHndl,1,SQL_PARAM_OUTPUT,SQL_C_CHAR,SQL_VARCHAR,size,0, (void*)&buffer,size,&size);

dann natürlich SQLExecute ...

Ich bekomm einfach den String nicht heraus. (in MYSQL funzt es)
Ausserdem bin ich (oder war ich?) der meinung das bei SQL_PARAM_OUTPUT
die ColumnSize (im Beispiel das erste size) nicht nötig ist nur bei
Input Params.
Hat jemand eine Idee?

Falls jemand nach Möglichkeit eine gute deutsche Beschreibung der
Funktion irgendwo im Netz gesehen hat, wüsste ich auch gern wo die
ist. :)

Danke im Voraus


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "SQLBindParameter ,Output, Varchar -> warum keine Rückgabe?" by Elmar Boye
Elmar Boye  
View profile   Translate to Translated (View Original)
 More options Jun 5 2004, 11:30 am
Newsgroups: microsoft.public.de.sqlserver
From: "Elmar Boye" <Elm...@gmx.net>
Date: Sat, 5 Jun 2004 17:30:44 +0200
Local: Sat, Jun 5 2004 11:30 am
Subject: Re: SQLBindParameter ,Output, Varchar -> warum keine Rückgabe?
Hallo Thomas,

thomas kost <j.hunn...@freenet.de> schrieb ...

> ich nutze die ODBC-Funktion SQlBindparameter,MS SQL Server 2000 u
> passenden Treiber

passsend heisst hoffentlich aktuell, wegen
http://support.microsoft.com/?kbid=290175
FIX: SQL Server ODBC Driver Does Not Transfer Return Values
from Stored Procedures

Da Deiner Prozedur ein einleitendes
    SET NOCOUNT ON
fehlt, wird für jede Anweisung (auch SET ...) ein Resultset
zurückgeliefert, siehe auch: http://support.microsoft.com/?kbid=240882
Ausgabevariablen werden immer nach dem letzten Ergebnis geliefert,
und so wäre ein SQLMoreResults() erforderlich. Wo sinnvoll (meistens also)
sollte man aber schon wegen obigem Verhalten SET NOCOUNT ON verwenden.

> (in MYSQL funzt es)

zählt nicht ;-)

> Ausserdem bin ich (oder war ich?) der meinung das bei SQL_PARAM_OUTPUT
> die ColumnSize (im Beispiel das erste size) nicht nötig ist nur bei
> Input Params.

Doch ist es. Anhand der Grössenangabe wird nämlich der die Länge
für den Parameter, also VARCHAR(cbColDef) festgelegt.

> Hat jemand eine Idee?

Ein Auszug mit dem es funktioniert:

 // Return Value
 sqlrc = SQLBindParameter( hstmt,
  1,
  SQL_PARAM_OUTPUT,
  SQL_C_LONG,
  SQL_INTEGER,
  0,
  0,
  &lReturnValue,
  sizeof(lReturnValue),
  &cbReturnValue);

 // String Parameter
 SQLBindParameter(hstmt,// SQLHSTMT hstmt,
  2,                    // SQLUSMALLINT ipar,
  SQL_PARAM_OUTPUT,     // SQLSMALLINT fParamType,
  SQL_C_CHAR,           // SQLSMALLINT fCType,
  SQL_VARCHAR,          // SQLSMALLINT fSqlType,
  OUTPUT_STRING_LEN,    // SQLULEN cbColDef
  0,                    // SQLSMALLINT ibScale
  &szOutputString,      // SQLPOINTER rgbValue
  OUTPUT_STRING_LEN,    // SQLLEN cbValueMax
  &cbOutputString);     // SQLLEN *pcbValue

 sqlrc = SQLExecDirect(hstmt,
  (SQLCHAR *)_T("{? = call ReadAll(?)}"), SQL_NTS );

 if (sqlrc == SQL_SUCCESS)
 {
  // Ohne SET NOCOUNT ON erforderlich
  sqlrc = SQLMoreResults(hstmt);
  while (sqlrc != SQL_NO_DATA)
  {
   sqlrc = SQLMoreResults(hstmt);
  }

  // Ausgabeparameter werden nach dem letzten Ergebnis geliefert
  if (cbOutputString > 0)
   _tprintf(_T("%s\n"), szOutputString);
 }

> Falls jemand nach Möglichkeit eine gute deutsche Beschreibung der
> Funktion irgendwo im Netz gesehen hat, wüsste ich auch gern wo die
> ist. :)

Deutsche Beschreibung für Entwicklerprodukte sind Mangelware, bei
etwas wie ODBC sowieso. Da musst Du Dich schon durch die MDAC Hilfe
durcharbeiten, die Bestandteil vom Platform SDK und gesammelt:
http://msdn.microsoft.com/data/downloads/

Und die Spezifika vom SQL Server Treiber findest Du in der
SQL Server Dokumentation zu ODBC. Nur ist auch die in der
deutschen Dokumentation englisch.

Gruss
Elmar


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "SQLBindParameter ,Output, Var char -> warum keine Rückgabe?" by thomas kost
thomas kost  
View profile   Translate to Translated (View Original)
 More options Jun 7 2004, 5:23 am
Newsgroups: microsoft.public.de.sqlserver
From: j.hunn...@freenet.de (thomas kost)
Date: 7 Jun 2004 02:23:47 -0700
Local: Mon, Jun 7 2004 5:23 am
Subject: Re: SQLBindParameter ,Output, Varchar -> warum keine Rückgabe?
hallo Elmar

> Da Deiner Prozedur ein einleitendes
>     SET NOCOUNT ON
> fehlt, wird für jede Anweisung (auch SET ...) ein Resultset
> zurückgeliefert, siehe auch: http://support.microsoft.com/?kbid=240882
> Ausgabevariablen werden immer nach dem letzten Ergebnis geliefert,
> und so wäre ein SQLMoreResults() erforderlich. Wo sinnvoll (meistens also)
> sollte man aber schon wegen obigem Verhalten SET NOCOUNT ON verwenden.

Ok 'SET NOCOUNT ON ' hab ich eingefügt .... aber klappt trotzdem
nicht. auch mit der SqlMoreResult schleife nicht.
Hab vergessen zu erwähnen das es bei allen anderen Typen: SQL_Integer,
SQL_Double .... wunderbar funktioniert nur nicht bei varchar!!!

Ich glaub nicht das es daran liegt das ich statt der SQLExecDirekt
funktion nur die SQlExecute benutze ...

gruss thomas


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "SQLBindParameter ,Output, Varchar -> warum keine Rückgabe?" by Elmar Boye
Elmar Boye  
View profile   Translate to Translated (View Original)
 More options Jun 7 2004, 4:01 pm
Newsgroups: microsoft.public.de.sqlserver
From: "Elmar Boye" <Elm...@gmx.net>
Date: Mon, 7 Jun 2004 22:01:10 +0200
Local: Mon, Jun 7 2004 4:01 pm
Subject: Re: SQLBindParameter ,Output, Varchar -> warum keine Rückgabe?
Hallo Thomas,

thomas kost <j.hunn...@freenet.de> schrieb ...

Bei mir schon. Ich habe mal mein kleines VC++.NET Testprogrämmchen
abgestellt unter
    http://www.elmarboye.de/download/odbcparam.zip

Im wesentlichen sollte das identisch sein. Wobei ich für VARCHAR
auch SQL_VARCHAR verwendet habe, da ansonsten die Daten unnötig mit
Leerzeichen aufgefüllt werden.

> Ich glaub nicht das es daran liegt das ich statt der SQLExecDirekt
> funktion nur die SQlExecute benutze ...

Vorausgesetzt Du hast SqlPrepare aufgerufen macht das keinen
Unterschied. Wie Du oben im Quellcode siehst, hatte ich die Variante
mal drin (ist auskommentiert).

Gruss
Elmar


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »