MarcoMySql DataProvider
PadovaBoy non è online. Ultima attività: 18/04/2008 12.22.47PadovaBoy
Inserito il: 02 marzo 2006 22.10
www.padovaboy.it / 542 messaggi dal 23 giu 2003
Gran lavoro!
Ma manca ancora qualcosina!
Ho aggiunto pò di codice alla turca per permettere al "tuo" connector di funzionare anche con i parameter dell'sqldatasource:

Modificando la classe parameter.cs

private object _parent;

internal void ResetParent()
{
this._parent = null;
}

internal object CompareExchangeParent(object value, object comparand)
{
object obj1 = this._parent;
if (comparand == obj1)
{
this._parent = value;
}
return obj1;
}


Modificando la classe ParameterCollection.cs:
ho modificato i due metodi "getParameter" che permettono il recupero di un dbparameter contenuto nella collezione (contenuta nell'array _param).
Ho modificato inoltre i set parameter e l'addrange.
Non ho inserito nessun throw per ora, quindi occhio ;)

private bool _isDirty;
private static Type ItemType;

internal bool IsDirty
{
get
{
return this._isDirty;
}
set
{
this._isDirty = value;
}
}

private void RangeCheck(int index)
{
if ((index < 0) || (this._parms.Count > index))
{
//throw ADP.ParametersMappingIndex(index, this);
}
}

private void OnChange()
{
this.IsDirty = true;
}


private void ValidateType(object value)
{
if (value == null)
{
//throw ADP.ParameterNull("value", this, SqlParameterCollection.ItemType);
}
if (!MySqlParameterCollection.ItemType.IsInstanceOfType(value))
{
//throw ADP.InvalidParameterType(this, SqlParameterCollection.ItemType, value);
}
}

private void Validate(int index, object value)
{
if (value == null)
{
//throw ADP.ParameterNull("value", this, SqlParameterCollection.ItemType);
}
object obj1 = ((MySqlParameter)value).CompareExchangeParent(this, null);
if (obj1 != null)
{
if (this != obj1)
{
//throw ADP.ParametersIsNotParent(SqlParameterCollection.ItemType, this);
}
if (index != this.IndexOf(value))
{
//throw ADP.ParametersIsParent(SqlParameterCollection.ItemType, this);
}
}
if (((MySqlParameter)value).ParameterName.Length == 0)
{
string text1;
index = 1;
do
{
text1 = "Parameter" + index.ToString(CultureInfo.CurrentCulture);
index++;
}
while (-1 != this.IndexOf(text1));
((MySqlParameter)value).ParameterName = text1;
}
}

private void Replace(int index, object newValue)
{

this.ValidateType(newValue);
this.Validate(index, newValue);
MySqlParameter parameter1 = (MySqlParameter) this._parms[index];
this._parms[index] = (MySqlParameter)newValue;
parameter1.ResetParent();
}

public override void AddRange(Array values)
{
this.OnChange();
if (values == null)
{
// throw ADP.ArgumentNull("values");
}
foreach (object obj1 in values)
{
this.ValidateType(obj1);
}
foreach (MySqlParameter parameter1 in values)
{
this.Validate(-1, parameter1);
this._parms.Add(parameter1);
}
// throw new Exception("AddRange-The method or operation is not implemented.");
}

protected override DbParameter GetParameter(string parameterName)
{
// throw new Exception("GetParameter-The method or operation is not implemented.");
int num1 = this.IndexOf(parameterName);
if (num1 < 0)
{
// throw ADP.ParametersSourceIndex(parameterName, this, MySqlParameterCollection.ItemType);
throw new Exception("GetParameter: Index is not valid.");
}
return (DbParameter) this._parms[num1];

}

protected override DbParameter GetParameter(int index)
{
//throw new Exception("GetParameter-The method or operation is not implemented.");
this.RangeCheck(index);
return (DbParameter) this._parms[index];
}

protected override void SetParameter(string parameterName, DbParameter value)
{
// throw new Exception("SetParameter-The method or operation is not implemented.");
this.OnChange();
int num1 = this.IndexOf(parameterName);
if (num1 < 0)
{
//throw ADP.ParametersSourceIndex(parameterName, this, MySqlParameterCollection.ItemType);
}
this.Replace(num1, value);

}

protected override void SetParameter(int index, DbParameter value)
{
//throw new Exception("SetParameter-The method or operation is not implemented.");
this.OnChange();
this.RangeCheck(index);
this.Replace(index, value);

}


Ovviamente se qualcuno riesce a fare una cosa meno disgustosa è pregato di postare il codice ;)
Io ci ho messo un'oretta copiando alla bell'emmeglio da sql ;)
Cmq questo l'ho provato in un paio di situazioni e sembrerebbe funzionare (per esempio ho creato un calendario e un detailview agganciato ad un sqlDatasource con un parameter di questo tipo:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ProviderName="MySql.Data.MySqlClient"
SelectCommand="SELECT IDmopera, data, da, a from MANODOPERA WHERE data = ?data">
<SelectParameters>
<asp:ControlParameter ControlID="Calendar1" PropertyName="SelectedDate" Name="data" />
</SelectParameters>
</asp:SqlDataSource>

e funzia ;) (sia lodato gesù :P)

Ps: non sono ancora riuscito però a fargli funziare la possibilità di aggiungere o modificare i parametri da codice.
Cioè aggiungendo un codice del tipo:

MySqlParameter dayParam = new MySqlParameter("?data", day.Date);
dayParam.MySqlDbType = MySqlDbType.Date;
SqlDataSource1.SelectParameters.Add(dayParam);

Mi da questo errore:

Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.UI.WebControls.ParameterCollection.Add(System.Web.UI.WebControls.Parameter)' has some invalid arguments

www.padovaboy.it dal 2001 con furore :D
Re: MarcoMySql DataProvider
nostromo non è online. Ultima attività: 05/07/2008 0.21.54nostromo
Inserito il: 03 marzo 2006 10.02
Microsoft Most Valuable Professional
contributi / Top Poster / Community manager / www.soluzioni4d.it / Blog / 11537 messaggi dal 18 feb 2004
mi prometto di analizzare meglio il problema, in questi giorni hi implementato una nuova classe, più precisamente MySqlConnectionStringBuilder, pensavo di mettere la nuova versione online stasera ma vista questa segnalazione rimando tutto a martedi prossimo.

grazie mille il tuo Feedback è stato preziosissimo e spero continui ad esserlo

ciao marco

Where we're going, we don't need roads!
http://nostromo.spaces.live.com/default.aspx
Re: MarcoMySql DataProvider
PadovaBoy non è online. Ultima attività: 18/04/2008 12.22.47PadovaBoy
Inserito il: 03 marzo 2006 10.36
www.padovaboy.it / 542 messaggi dal 23 giu 2003
Azz sarò cazziato da tutti quelli che volevano uno MySqlConnectionStringBuilder :P

Cmq felice di aver contribuito in minissima parte ad un progetto che credo interessi chiunque usi questo fantastico database!
(Ps: occhio al codice che sono bello fresco di c# anche se ho anni di esperienza di copia & modifica & incolla ;) hehehehe

Ps: sarebbe interessante rifare la classe collection con le List<T> come han fatto per SQL solo che poi (credo) funzionerebbe solo con la versione 2.0 di .net.
Infatti li il casino era convertire il codice perchè sfruttasse l'array di oggetti invece che la list di MySQLparameter (spero di aver beccato i metodi giusti :P)

www.padovaboy.it dal 2001 con furore :D
Re: MarcoMySql DataProvider
nostromo non è online. Ultima attività: 05/07/2008 0.21.54nostromo
Inserito il: 03 marzo 2006 10.45
Microsoft Most Valuable Professional
contributi / Top Poster / Community manager / www.soluzioni4d.it / Blog / 11537 messaggi dal 18 feb 2004
pricipalmente ho rifattorizzato il connector 1.0.7 pe esigenze personali e immediate, ma visto l'interesse sono spinto a migliorarlo :).

dopo cena analizzerò tutto "perbenino" , come si dice dalle mie parti:)

grazie ancora

ciao marco

Where we're going, we don't need roads!
http://nostromo.spaces.live.com/default.aspx
Re: MarcoMySql DataProvider
Daniele80 non è online. Ultima attività: 07/04/2008 17.45.27Daniele80
Inserito il: 10 aprile 2006 21.24
370 messaggi dal 08 set 2001
scusate ma ho avuto solo ora tempo di vedere il gran lavoro fatto da voi.

ho inserito manualmente il datasource:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Server=localhost;Uid=root;Pwd=root;Database=miodb;" ProviderName="MySql.Data.MySqlClient" >
</asp:SqlDataSource>

il configure datasource non va, mi dice:
the data providere mysql.data.mysqlclient could not be found in the system configuration.
Unable to find requested .net framework data proivider. it may not be installed.


ho dimenticato qualcosa pewr strada?

Re: MarcoMySql DataProvider
PadovaBoy non è online. Ultima attività: 18/04/2008 12.22.47PadovaBoy
Inserito il: 11 aprile 2006 10.06
www.padovaboy.it / 542 messaggi dal 23 giu 2003
Missà che ti sei dimenticato di modificare il config.web aggiungendo il provider factory giusto:
<system.data>
<DbProviderFactories>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description="MySql driver refattorizzato" type="MySql.Data.MySqlClient.MySqlProviderFactory, MySQL.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</DbProviderFactories>
</system.data>

Ora io ho ricompilato quello che ha scritto Marco quindi sarà tipo marco.mysql o qualcosa del genere (non ricordo).
Ps: sei sicuro che nel file allegato non vi siano istruzioni?
Mi pareva proprio di si!

Ricordati anche che la dll deve stare sotto la cartella /bin/.

Cmq è tutto lavoro suo ;) Io ho solo sollevato delle feature necessarie ;)

Buon divertimento, e loda anche tu il buon marco ;)

www.padovaboy.it dal 2001 con furore :D
Re: MarcoMySql DataProvider
Daniele80 non è online. Ultima attività: 07/04/2008 17.45.27Daniele80
Inserito il: 11 aprile 2006 11.26
370 messaggi dal 08 set 2001
nella BIN c'è la DLL.

nel web.config c'è quello che ha scritto nell'articolo.

nella pagina .aspx c'è sempre la copia del sqldatasource che si vede nell'articolo.

Re: MarcoMySql DataProvider
PadovaBoy non è online. Ultima attività: 18/04/2008 12.22.47PadovaBoy
Inserito il: 11 aprile 2006 11.30
www.padovaboy.it / 542 messaggi dal 23 giu 2003
E' strano!
Perchè l'errore segnalato pare dire che o non c'è la dll, (quindi o l'hai copiata nel posto sbagliato o proprio non l'hai copiata).
Oppure hai inserito lo strongname sbagliato...controlla avrai ricopiato male qualcosa!
(altro sinceramente non so dirti!)

www.padovaboy.it dal 2001 con furore :D


Pagine: [1] 2 3 4 Avanti >>
| Torna al forum
Vai a:

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.


COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums