2 // System.Data.SqlClient.SqlDataAdapter.cs
5 // Rodrigo Moya (rodrigo@ximian.com)
6 // Daniel Morgan (danmorg@sc.rr.com)
8 // (C) Ximian, Inc 2002
12 using System.ComponentModel;
14 using System.Data.Common;
16 namespace System.Data.SqlClient
19 /// Represents a set of command-related properties that are used
20 /// to fill the DataSet and update a data source, all this
21 /// from a SQL database.
23 public sealed class SqlDataAdapter : DbDataAdapter
27 SqlCommand deleteCommand;
28 SqlCommand insertCommand;
29 SqlCommand selectCommand;
30 SqlCommand updateCommand;
32 bool isDirty; // indicates if query has changed since last SELECT
38 public SqlDataAdapter ()
39 : this (new SqlCommand ())
43 public SqlDataAdapter (SqlCommand selectCommand)
45 this.deleteCommand = new SqlCommand ();
46 this.insertCommand = new SqlCommand ();
47 this.selectCommand = selectCommand;
48 this.updateCommand = new SqlCommand ();
52 public SqlDataAdapter (string selectCommandText, SqlConnection selectConnection)
53 : this (new SqlCommand (selectCommandText, selectConnection))
57 public SqlDataAdapter (string selectCommandText, string selectConnectionString)
58 : this (selectCommandText, new SqlConnection (selectConnectionString))
66 public new SqlCommand DeleteCommand {
67 get { return deleteCommand; }
68 set { deleteCommand = value; }
71 public new SqlCommand InsertCommand {
72 get { return insertCommand; }
73 set { insertCommand = value; }
76 public new SqlCommand SelectCommand {
77 get { return selectCommand; }
80 selectCommand = value;
84 public new SqlCommand UpdateCommand {
85 get { return updateCommand; }
86 set { updateCommand = value; }
89 #endregion // Properties
93 public override int Fill (DataSet dataSet)
95 // Adds or refreshes rows in the DataSet to match those in
96 // the data source using the DataSet name, and creates
97 // a DataTable named "Table"
99 // If the SELECT query has changed, then clear the results
100 // that we previously retrieved.
106 dataSet.Tables.Clear ();
109 // Run the SELECT query and get the results in a datareader
110 SqlDataReader dataReader = selectCommand.ExecuteReader ();
113 // The results table in dataSet is called "Table"
114 string tableName = "Table";
120 if (!this.isDirty) // table already exists
122 table = dataSet.Tables[tableName];
124 else // create a new table
126 table = new DataTable (tableName);
127 for (int j = 0; j < dataReader.FieldCount; j += 1)
129 string baseColumnName = dataReader.GetName (j);
130 string columnName = "";
132 if (baseColumnName == "")
133 baseColumnName = "Column";
135 columnName = baseColumnName;
137 for (int k = 1; table.Columns.Contains (columnName) || columnName == ""; k += 1)
138 columnName = String.Format ("{0}{1}", baseColumnName, k);
140 table.Columns.Add (new DataColumn (columnName, dataReader.GetFieldType (j)));
142 dataSet.Tables.Add (table);
146 object[] itemArray = new object[dataReader.FieldCount];
148 while (dataReader.Read ())
150 // need to check for existing rows to reconcile if we have key
151 // information. skip this step for now
153 // append rows to the end of the current table.
154 dataReader.GetValues (itemArray);
155 thisRow = table.NewRow ();
156 thisRow.ItemArray = itemArray;
157 table.ImportRow (thisRow);
162 tableName = String.Format ("Table{0}", i);
163 } while (dataReader.NextResult ());
166 this.isDirty = false;
171 public override DataTable[] FillSchema (DataSet dataSet, SchemaType schemaType)
173 throw new NotImplementedException ();
177 public override IDataParameter[] GetFillParameters ()
179 throw new NotImplementedException ();
183 public override int Update (DataSet dataSet)
185 throw new NotImplementedException ();
189 protected override RowUpdatedEventArgs CreateRowUpdatedEvent (DataRow dataRow, IDbCommand command, StatementType statementType, DataTableMapping tableMapping)
191 throw new NotImplementedException ();
196 protected override RowUpdatingEventArgs CreateRowUpdatingEvent (DataRow dataRow, IDbCommand command, StatementType statementType, DataTableMapping tableMapping)
198 throw new NotImplementedException ();
201 protected override void OnRowUpdated (RowUpdatedEventArgs value)
203 throw new NotImplementedException ();
206 protected override void OnRowUpdating (RowUpdatingEventArgs value)
208 throw new NotImplementedException ();
211 #endregion // Methods
213 #region Events and Delegates
215 public event SqlRowUpdatedEventHandler RowUpdated;
216 public event SqlRowUpdatingEventHandler RowUpdating;
218 #endregion // Events and Delegates