mmofacts.com

.Net und der ADO.Net-Provider und MySQL

gepostet vor 19 Jahre, 8 Monate von TheUndeadable
Hallo,

folgender Quelltext:

 

using System;
using System.Data;
using MySql.Data.MySqlClient;

namespace MySQL_Test
{
static class Program
{
///
/// Main function
///
static void Main()
{
String strConnectionString =
"Data Source=localhost;Database=depon;User ID=root;Password=XXX";
MySqlConnection oConnection = new MySqlConnection(strConnectionString);

oConnection.Open();

MySqlCommand oCommand = oConnection.CreateCommand();
oCommand.CommandText = "INSERT INTO games(title) VALUES (@title)";

oCommand.Parameters.Add("title", MySqlDbType.String);
oCommand.Parameters["title"].Value = "TEXT";

oCommand.ExecuteNonQuery();
}
}
}


Eigentlich erwarte ich, dass eine Zeile mit dem Inhalt 'TEXT' eingefügt wird, stattdessen erhalte ich
+--------+-------+
| gameid | title |
+--------+-------+
| 2 | NULL |
+--------+-------+

Unter OLEdb funktioniert die Sache einwandfrei, unter dem MySQL-Connector erhalte ich nur NULL Einträge. Ersetze ich @title durch ein ?, so erhalte ich folgende Exception: 'Parameter '?' must be defined'.

Ich nutze den MySQL Connector Net 1.0.4 direkt von www.mysql.com, als Server MySQL 4.1. Weiterhin tritt dieser Fehler sowohl unter .Net 1.1, als auch .Net 2.0 auf.

 


MySqlCommand oCommand = oConnection.CreateCommand();
oCommand.CommandText = "INSERT INTO games(title) VALUES (?title)";

oCommand.Parameters.Add("?title", MySqlDbType.String);
oCommand.Parameters["?title"].Value = "TEXT";

oCommand.ExecuteNonQuery();


Damit läuft die Sache einwandfrei. Sollte nicht eigentlich das '@'-Zeichen als Kennzeichnung genommen werde oder habe ich bei ADO.Net falsch verstanden?

Vielen Dank für eine Hilfestellung,
gepostet vor 19 Jahre, 8 Monate von schokofreak
Das erste (was nicht funktioniert) ist in meinen Augen fehlerfrei...
Denke, es ist ein Problem des MySQLs...

Allerdings sind meine Erfahrungen da ein bisschen beschränkt.

Gruss
gepostet vor 19 Jahre, 8 Monate von TheUndeadable
Danke für die Info,

dachte, dass man jetzt einigermaßen Db-unabhängig programmieren kann und nur noch auf den speziellen Connector angewiesen ist.

Aber, dass man wahrscheinlich dann für jede Db wieder nen Wrapper schreiben muss, naja, da muss man wohl durch.

Standards sind scheinbar nur dafür da um durch Fehlinterpretationen Leute zu quälen (man schaue sich CSS, HTML und SQL an).

OleDB versteht zumindest die korrekte Spezifikation....
gepostet vor 19 Jahre, 8 Monate von schokofreak
Hmmm... aber auch nicht immer. Hatte auch schon mal einen MySQL Treiber, bei welchem man beim Zugriff über OleDB immer nur NULL werte erhalten hat.

Fazit: MySQL ist ned sooo MS kompatibel

Auf diese Diskussion antworten