J'essaie d'écrire du code C# simple qui va sélectionner certaines données d'une instance SQL Server, modifier les données et mettre à jour les modifications dans la base de données. Mais j'ai du mal à comprendre exactement comment faire. Voici une version simplifiée de mon code:Est-il possible d'utiliser SqlTypes avec un SqlDataAdapter?
using (SqlConnection conn = new SqlConnection("Server=(local);Integrated Security=true;Database=master"))
{
SqlDataAdapter da = new SqlDataAdapter("SELECT ID, Field FROM test", conn);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds, "test");
foreach (DataRow dr in ds.Tables["test"].Rows)
{
dr["Field"] = someFunction((SqlString)dr["Field"]);
}
da.Update(ds, "test");
}
Mais ce code me donne l'erreur suivante:
System.InvalidCastException: specified cast is not valid.
Je changer le code à utiliser string
plutôt que SqlString
:
dr["Field"] = someFunction((string)dr["Field"]);
Mais alors j'obtiens cette erreur s'il y a des nulls dans mes données:
System.InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.String'.
Je pensais que le qui Le point de l'espace de noms SqlTypes consistait à fournir des types capables de gérer les valeurs nulles de la base de données. Si tel est le cas, pourquoi ne puis-je pas les utiliser avec un SqlDataAdapter? J'espère qu'il me manque quelque chose d'évident.
Qu'advient-il si vous faites 'dr.GetSqlString (indexOfFieldColumn)'? – womp
Whups ... peu importe, j'ai mal interprété votre "dr" comme datareader, pas datarow. Cela ne marchera pas. – womp
@womp: Erreur 'System.Data.DataRow' ne contient pas de définition pour 'GetSqlString' – Bounderby