我想写一些简单的C#代码,它将从SQL Server实例中选择一些数据,修改数据并将更改更新回数据库。但我很难搞清楚如何做到这一点。这里是我的代码的简化版本:有什么办法可以使用SqlTypes与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");
}
但这段代码是给我下面的错误:
System.InvalidCastException: specified cast is not valid.
所以我改变了代码,使用string
而非SqlString
:
dr["Field"] = someFunction((string)dr["Field"]);
但后来我得到这个错误,如果我的数据中有任何空值:
System.InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.String'.
我以为谁SqlTypes命名空间的关键是提供可以处理数据库空值的类型。如果是这样的话,为什么我不能将它们与SqlDataAdapter一起使用?希望我失去了一些明显的东西。
会发生什么? – womp 2010-09-10 16:34:42
Whups ...没关系,我误读你的“博士”作为datareader,而不是datarow。这是行不通的。 – womp 2010-09-10 16:36:36
@womp:错误'System.Data.DataRow'不包含'GetSqlString'的定义 – Bounderby 2010-09-10 16:37:59