Thanks for Help.
Now i use the factory from System.Data.
adapter.Update updates 0 records (values are changed!)
GetUpdateCommand throws a cast exception.
Now i write my own UpdateCommand :-((
something like this

public static DbCommand CreateUpdateCommand(DbProviderFactory factory, DataSet 
dataSet)
                {
                        DbCommand updateCommand = factory.CreateCommand();
                        if (dataSet.Tables.Count > 1)
                        {
                                throw new InvalidOperationException("Nur eine 
Tabelle pro DataSet 
erlaubt!");
                        }
                        DataTable table = dataSet.Tables[0];
                        string commandText = String.Format("UPDATE `{0}` SET", 
table.TableName);
                        string whereText = " WHERE";

                        foreach (DataColumn column in table.Columns)
                        {
                                if (column.Unique)
                                {
                                        whereText += String.Format(" `{0}` = 
?{0}", column.ColumnName);
                                }
                                else
                                {
                                        commandText += String.Format(" `{0}` = 
?{0},", column.ColumnName);
                                }
                                DbParameter param = factory.CreateParameter();
                                param.ParameterName = column.ColumnName;
                                param.DbType = 
TypeConvertor.ToDbType(column.DataType);
                                param.Value = 
dataSet.Tables[0].Rows[0][column.ColumnName];
                                updateCommand.Parameters.Add(param);
                        }
                        commandText = commandText.Remove(commandText.Length -1);
                        updateCommand.CommandText = commandText + whereText;
                        return updateCommand;
                }

/Wolfgang

>Am Dienstag, 9. Dezember 2008 15:35:06 schrieb Daniel Morgan:
> If you are using gmcs and the .net 2.0 profile or higher, you should be
> using the built-in provider factories in System.Data.
>
> You would only use the provider factory stuff from Mono.Data if you are
> using mcs and the .net  1.1 profile.  Mono.Data.ProviderFactory is
> deprecated and should only be used with .net 1.1 software.
>
> DbcommandBuilder does not exist in the .net 1.1 profile.  DbCommandBuilder
> is a data type found in the .net 2.0 profile; therefore, you should be
> using the gmcs to compile and DbProviderFactory found in System.Data.
>
> http://msdn.microsoft.com/en-us/library/dd0w4a2z.aspx
>
> --- On Tue, 12/9/08, Wolfgang Mauer <[EMAIL PROTECTED]> wrote:
> > From: Wolfgang Mauer <[EMAIL PROTECTED]>
> > Subject: [Mono-list]  GetUpdateCommand/ExecuteNonQuery adapter.Update
> > To: [email protected]
> > Date: Tuesday, December 9, 2008, 7:18 AM
> > Hi all,
> > can someone can tell me what is the "right" way
> > to sync a dataset with the
> > database.
> > I have try'd some diffrent ways with MySql and Npgsql
> > but in all ways Update
> > was not possible.
> > the filling of a dataset was no problem.
> > i use the ProviderFactory from Mono.Data
> >
> > Just do a adapter.Update has no effect
> >
> > with
> > CommandBuilder and GetUpdateCommand/ExecuteNonQuery
> >
> > Provider provider =
> > ProviderFactory.Providers["Mysql.Data"];
> > DbCommandBuilder builder =
> > (DbCommandBuilder)provider.CreateCommandBuilder(this.adapter);
> > DbCommand updateCommand = builder.GetUpdateCommand();
> > exception => "Cannot
> > cast from source to destination type" ???????
> >
> > the selectcommand of the adapter is valid an a adapte.fill
> > work right.
> >
> > any Help
> >
> > --
> > Top-Soft
> > Softwareentwicklung
> > Inhaber: Wolfgang Mauer
> > Reitesweg 9, 96103 Hallstadt
> > Tel.: +49 (0)951 / 2221520
> > Fax: +49 (0)951 / 2221521
> > _______________________________________________
> > Mono-list maillist  -  [email protected]
> > http://lists.ximian.com/mailman/listinfo/mono-list



-- 
Top-Soft
Softwareentwicklung
Inhaber: Wolfgang Mauer
Reitesweg 9, 96103 Hallstadt
Tel.: +49 (0)951 / 2221520
Fax: +49 (0)951 / 2221521
_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to