Variablen an den Connectionstring (SQLDriverConnect) übergeben
-
Hallo Leute,
meine Frage ist nur, wie ich Variablen übergeben kann? Mein kläglicher Versuch funktioniert nicht.
SQLDriverConnect(hdbc, 0, (SQLCHAR*)"DRIVER=" + xxx + ";SERVER=......", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, SQL_DRIVER_COMPLETE);
-
1. Das gehört nicht ins C++/CLI Forum, denn es handelt sich um C++.
2. Hier eine Lösung, ev. hilft sie Dir weiter:array_util.h
#pragma once #include <vector> template <typename T> T* c_array(std::vector<T>& v) { return v.empty() ? 0 : &v[0]; } template <typename T> const T* const_c_array(const std::vector<T>& v) { return v.empty() ? 0 : &v[0]; }
sql_string_util.h
#pragma once #include <sstream> #include <string> #include <vector> #include <windows.h> #include <sql.h> typedef std::basic_stringstream<SQLCHAR> sqlchar_stringstream; typedef std::basic_string<SQLCHAR> sqlchar_string; typedef std::vector<SQLCHAR> sqlchar_buffer;
string_to_buffer.h
#pragma once #include <string> #include <vector> #include <algorithm> template <typename T> std::vector<T> string_to_buffer(const std::basic_string<T>& s) { // include terminating zero. std::vector<T> b(s.size() + 1); std::copy(s.begin(), s.end(), b.begin()); return b; }
Demo:
main.cpp#include "array_util.h" #include "sql_string_util.h" #include "string_to_buffer.h" int _tmain(int /*argc*/, _TCHAR* /*argv*/[]) { sqlchar_stringstream stream; stream << "DRIVER=" << "xyz" << ";SERVER=" << "127.0.0.1"; sqlchar_string string = stream.str(); sqlchar_buffer buffer = string_to_buffer(string); SQLCHAR* connection_string = c_array(buffer); connection_string; }
Eigentlich könnte auf der Variable string (vom Typ sqlchar_string) die Memberfunktion c_str() aufgerufen werden um einen 0 terminierter String zu erhalten. Leider ist in der API Funktion (SQLDriverConnect) ein non-const String gefordert, desshalb ist der Buffer nötig. Der ist nämlich beschreibbar.
Simon