我需要在ADO.NET更新之前执行填充吗?

本文关键字:执行 填充 更新 ADO NET | 更新日期: 2023-09-27 18:08:15

这可能看起来微不足道,但我所见过的ADO.net的每个例子几乎总是在'update'之前有一个'fill'。我们真的不想填充一个可能有1000个blob的数据集,我们只想添加(插入)到表中。更新是否需要填充?下面是微软网站上的示例代码(我们正在做类似的事情):

SqlConnection con = new SqlConnection("Server=Darkover;uid=<username>;pwd=<strong            password>;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("Select * From MyImages", con);
SqlCommandBuilder MyCB = new SqlCommandBuilder(da); // What does this even do?
DataSet ds = new DataSet("MyImages");
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
FileStream fs = new FileStream(@"C:'winnt'Gone Fishing.BMP", FileMode.OpenOrCreate, FileAccess.Read);
byte[] MyData= new byte[fs.Length];
fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
da.Fill(ds,"MyImages");  // are they really filling a dataset with all those images???
DataRow myRow;
myRow=ds.Tables["MyImages"].NewRow();
myRow["Description"] = "This would be description text";
myRow["imgField"] = MyData;
ds.Tables["MyImages"].Rows.Add(myRow);
da.Update(ds, "MyImages");
con.Close();

我需要在ADO.NET更新之前执行填充吗?

为了获得MyImages表的模式,需要调用da.Fill()。这样,在为列赋值时,您可以使用NewRow()调用返回的DataRow和正确的模式(列、键等)。

您可以通过设置SqlDataAdapter.FillCommandBehavior:

来告诉SqlDataAdapter只返回没有数据的模式
da.FillCommandBehavior = CommandBehavior.SchemaOnly;
da.Fill(ds,"MyImages"); // Just get the schema for MyImages
DataRow myRow = ds.Tables["MyImages"].NewRow();
myRow["Description"] = "This would be description text";
myRow["imgField"] = MyData;
ds.Tables["MyImages"].Rows.Add(myRow);
da.Update(ds, "MyImages");

您可以选择使用da.FillSchema(),如果查询返回多个表,则可以使用单个DataTableDataSet

DataTable dt = new DataTable();
da.FillSchema(dt, SchemaType.Mapped);
DataRow myRow = dt.NewRow();
myRow["Description"] = "This would be description text";
myRow["imgField"] = MyData;
dt.Rows.Add(myRow);
da.Update(dt);