Laden...

ODBC Keyword not supported: "dsn"

Erstellt von DeadEye vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.517 Views
D
DeadEye Themenstarter:in
55 Beiträge seit 2008
vor 15 Jahren
ODBC Keyword not supported: "dsn"

verwendetes Datenbanksystem: ODBC

Hallo zusammen.
nachdem ichs weder in Google noch hier im Forum gefunden habe poste ichs mal, vielleicht weis ja jemand eine Antwort.

Folgendes Problem:
Ich habe eine Anwendung, welche bisher ueber System.Data.SqlClient auf mehrere MS SQL Datenbankserver zugegriffen hat. Nun soll die Art der Zugriffe umgestellt werden auf ODBC (Irgendwas wegen Spiegelung und Loadbalancing der Server was weis ich auf jedenfall soll ODBC benutzt werden, also bitte keine Antworten mit alternativen bitte 😉)


<connectionStrings>
<add name="meinString" connectionString="dsn=MeinDSN;uid=meinUser;pwd=meinPasswort;" providerName="System.Data.Odbc"/>
</connectionStrings>

SystemDSN ist erstellt und funktioniert auch ausoweit.

Der Zugriff erfolgt ueber einen DAL, kurz gefasst waere der Code so:


using System;
using System.Configuration;
using System.Data;
using System.Data.Odbc;

namespace Portal.DAL.Services
{
	public class BaseDBGateway
	{
		private static OdbcConnection sql;

		static DBGateway()
		{
			Sql = new OdbcConnection(ConfigurationManager.ConnectionStrings["myString"].ConnectionString);
		}

		public static OdbcConnection Sql
		{
			get
			{
				if (sql.State != ConnectionState.Closed)
				{
					sql = new OdbcConnection(sql.ConnectionString);
				}
				return sql;
			}
			set
			{
				sql = value;
			}
		}
	}
}

Und dann der eigentliche Zugriff:


SqlDatabase db = new SqlDatabase(BaseDBGateway.Sql.ConnectionString);
DbCommand command = db.GetStoredProcCommand("LoginPUT");

using (IDataReader reader = db.ExecuteReader(command))
{
.....

und bei ExecuteReader kommt eine Exception mit Keyword not supported: "dsn".
Was mache ich falsch?

Danke mal im Voraus,
DeadEye

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

X
1.177 Beiträge seit 2006
vor 15 Jahren

Hi DeadEye,

was Du falsch machst - hmm - ka^^ denn einen Kommetar ("umgestellt werden auf ODBC") hast ja verboten. Aber Dein Prgrammcode schaut so garnicht nach dem Beispiel vom MSDN aus: klick hier

Der Connectionstring ist nicht auf der DSN aufgebaut, ka ob das überhaupt noch anständig geht.

Zur Diskussion wegen "Spiegelung und Loadbalancer" : da ist wirklich kein ODBC erforderlich. Die Idee kommt von Leuten die es echt nicht besser wissen!

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

D
DeadEye Themenstarter:in
55 Beiträge seit 2008
vor 15 Jahren

Hatte zuerst noch mit SqlDatabase gearbeitet (aus der Enterprise Library 3.1, nur die scheint nicht mit ODBC klar zu kommen. Schade eigentlich 🙁 )

Hast du vlt Infos zu Spiegelung loadbalancing ohne ODBC? Ich bin da leider nicht so der DB Guru und bei uns macht das auch einer aus der Hardware abteilung, und selbst der Senior Developer is der Meinung dass das nur mit ODBC geht. vlt kann ich die ja noch eines anderen belehren, dann erspare ich mir einige Stunden an Umbau an diesem Programm... (Kostenersparnis ist immer ein sehr guter Grund 😉)

Danke auf jedenfall schonmal fuer den Link, werd ich gleich mal ausprobieren 🙂

[Edit]
PS: Hier im Forum findet sich mal nix, da bin ich jetzt nur wieder auf diesen Thread hier gekommen XD

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

D
DeadEye Themenstarter:in
55 Beiträge seit 2008
vor 15 Jahren

So ich hab meinen Code jetzt ein wenig angepasst:


OdbcConnection cn;
OdbcCommand cmd;
OdbcParameter prm;
OdbcDataReader dr;

try
{
	//Change the connection string to use your SQL Server.
	cn = new OdbcConnection(BaseDBGateway.Sql.ConnectionString);

	//Use ODBC call syntax.
	cmd = new OdbcCommand("{call LoginPUT (?)}", cn);

	prm = cmd.Parameters.Add("@loginName", OdbcType.VarChar);
	prm.Value = loginname;
	prm = cmd.Parameters.Add("@passwort", OdbcType.VarChar);
	prm.Value = password;
	prm = cmd.Parameters.Add("@ipAdresse", OdbcType.VarChar);
	prm.Value = ipAddress;

	cn.Open();

	dr = cmd.ExecuteReader();

	//List each product.
	while (dr.Read())
	{
		string s = dr.GetString(0);
	}

	//Clean up.
	dr.Close();
	cn.Close();
}
catch (OdbcException o)
{
	string s = o.Message;
}

Zuerst kam immer ein Fehler bei


cn.Open();

und zwar irgendwas das kein Treiber angegeben ist. also aenderte ich die Connectionstrings in etwa so ab:


Driver={SQL Server};dsn=etc wie oben

Und dann kommt: InnerException = {"Keyword not supported: 'driver'."}

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

D
DeadEye Themenstarter:in
55 Beiträge seit 2008
vor 15 Jahren

Oha!
Wenn ich


cn = new OdbcConnection("Driver={SQL Server};DSN=<DSNname>;uid=<UserID>;pwd=<DBPw>;");

benutze kommt

{"ERROR [08001] [Microsoft][ODBC SQL Server Driver]Weder ein DSN noch ein SERVER Schlüsselwort wurde angegeben"}

Leider ist 08001 ein Generischer Fehler. Steht anscheinend fuer -Unable to Connect-
Und ein DSN ist eigentlich angegeben....

??? naja aber ich scheine schon in die richtige Richtung zu kommen 🙂

[Edit]
So funktioniert es:


cn = new OdbcConnection("DSN=<DSNname>;uid=<UserID>;pwd=<DBPw>;");

Mal schaun vlt gehts auch noch mit der Enterprise library 3.1

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo DeadEye,

vielleicht hilft Dir das weiter:
Connection Strings

wobei ich nicht weiß, wie und ob ODBC dadrin enthalten ist.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

D
DeadEye Themenstarter:in
55 Beiträge seit 2008
vor 15 Jahren

vielleicht hilft Dir das weiter:

>

wobei ich nicht weiß, wie und ob ODBC dadrin enthalten ist.

Hi, Danke fuer den link, aber den kenne ich bereits 🙂
ODBC ist uebriegens dort nicht zu finden weil das ein Provider ist, der Quasi als mittelsman zwischen einem beliebigen Datenbanksystem wie MS SQL oder MySQL und dir selbst steht.

Fuer mich intressant waere http://www.connectionstrings.com/?carrier=dsn welcher auch genauso betnutzt wurde aber anfrangs aus anderen Gruenden nicht funktioniert hatte...

Inzwischen soll ich uebrigens mein Projekt ruhen lassen, nachdem ich meinen Chefs glaubhauft rueberbringen konnte was fuer ein unnoetiger aufwand die Umstellung von .net Methoden auf ODBC waere. Dabei habe ich mich auf den Post von Xynratron berufen, der, auch wenn meine Chefs den natuerlich nicht kennen, sich sicher besser auskennt als die 😁

Das ODBC Keyword not supported: "dsn" ist somit eigentlich selbst geloest, denn mit dem richtigem String und den richtigen Methoden (Wie hier in den vorherigen Posts angefuehrt = funktioniert es mal soweit...

Greetz DeadEye

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop