📄 myresultsets.cs
字号:
using System.Data;
using System.Data.SqlServerCe;
namespace MobileDevelopersHandbook.MyResultSetsResultSets
{
partial class ProductResultSet
{
const string databaseFilename = "MyDatabase.sdf; Password=\"MobileP@ssw0rd\";";
const string tableName = "Product";
/// <summary>
/// Construct the ResultSet instance initializing the ResultSetOptions and connection string
/// optionally opening the table. Calling this method with an openTable value of true provides
/// the same behavior as using the default constructor.
/// </summary>
/// <param name="openTable"></param>
public ProductResultSet(bool openTable)
{
InitializeResultSetOptions();
InitializeResultSetConnectionString();
if (openTable)
this.Open();
}
/// <summary>
/// ResultSet will contain those records
/// </summary>
/// <param name="commandText"></param>
public void Open(string sqlCommandText)
{
using (SqlCeCommand sqlCeSelectCommand = CreateConnectionAndCommand())
{
sqlCeSelectCommand.CommandText = sqlCommandText;
sqlCeSelectCommand.CommandType = System.Data.CommandType.Text;
sqlCeSelectCommand.ExecuteResultSet(ResultSetOptions, this);
}
}
/// <summary>
/// ResultSet will contain only those records where the value of the specified index falls
/// within rangeStart and rangeEnd inclusive. Records will be returned in the order of the index.
/// If rangeStart is null, the ResultSet will contain the whole table with the records returned
/// in the order of the index
/// </summary>
/// <param name="indexName"></param>
/// <param name="rangeStart"></param>
/// <param name="rangeEnd"></param>
public void Open(string indexName, object[] rangeStart, object[] rangeEnd)
{
using (SqlCeCommand sqlCeSelectCommand = CreateConnectionAndCommand())
{
sqlCeSelectCommand.CommandText = tableName;
sqlCeSelectCommand.CommandType = System.Data.CommandType.TableDirect;
sqlCeSelectCommand.IndexName = indexName;
// If a range value specified, call SetRange - start w/o end is legal, but not vice versa
if (rangeStart != null)
sqlCeSelectCommand.SetRange(DbRangeOptions.Default, rangeStart, rangeEnd);
sqlCeSelectCommand.ExecuteResultSet(this.resultSetOptions, this);
}
}
/// <summary>
/// See the summary of Open(string indexName, object[] rangeStart, object[] rangeEnd)
/// for details.
/// This method is a wrapper provided for convenience in those cases where the specified index
/// contains only a single column
/// </summary>
/// <param name="indexName"></param>
/// <param name="rangeStart"></param>
/// <param name="rangeEnd"></param>
public void Open(string indexName, object rangeStart, object rangeEnd)
{
Open(indexName, new object[] { rangeStart }, new object[] { rangeEnd });
}
/// <summary>
/// ResultSet will contain only those records where the value of the specified index falls
/// within the criteria set by the rangeOptions, rangeStart, rangeEnd criteria. Records will be returned in the order of the index.
/// </summary>
/// <param name="indexName"></param>
/// <param name="rangeOptions"></param>
/// <param name="rangeStart"></param>
/// <param name="rangeEnd"></param>
public void Open(string indexName, DbRangeOptions rangeOptions, object[] rangeStart, object[] rangeEnd)
{
using (SqlCeCommand sqlCeSelectCommand = CreateConnectionAndCommand())
{
sqlCeSelectCommand.CommandText = tableName;
sqlCeSelectCommand.CommandType = System.Data.CommandType.TableDirect;
sqlCeSelectCommand.IndexName = indexName;
sqlCeSelectCommand.SetRange(rangeOptions, rangeStart, rangeEnd);
sqlCeSelectCommand.ExecuteResultSet(this.resultSetOptions, this);
}
}
/// <summary>
/// See the summary of Open(string indexName, DbRangeOptions rangeOptions, object[] rangeStart, object[] rangeEnd)
/// for details.
/// This method is a wrapper provided for convenience in those cases where the specified index
/// contains only a single column
/// </summary>
/// <param name="indexName"></param>
/// <param name="rangeOptions"></param>
/// <param name="rangeStart"></param>
/// <param name="rangeEnd"></param>
public void Open(string indexName, DbRangeOptions rangeOptions, object rangeStart, object rangeEnd)
{
Open(indexName, rangeOptions, new object[] { rangeStart }, new object[] { rangeEnd });
}
/// <summary>
/// Make connection string value publicly visible
/// </summary>
public string ResultSetConnectionString
{
get { return resultSetConnectionString; }
}
/// <summary>
/// Make options publicly visible
/// </summary>
public ResultSetOptions ResultSetOptions
{
get { return resultSetOptions; }
}
#region InitializeResultSetConnectionString, InitializeResultSetOptions, CreateConnectionAndCommand
/// <summary>
/// Set the resultSetConnectionString member variable to the default connection string.
/// </summary>
protected void InitializeResultSetConnectionString()
{
if (resultSetConnectionString == null)
{
resultSetConnectionString = ("Data Source ="
+ (System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
+ "\\" + databaseFilename + ";"));
}
}
/// <summary>
/// Set the resultSetOptions member variable to the default values. By default it is set
/// to support scrolling, updates and be sensitive to changes in the datasource.
/// </summary>
protected void InitializeResultSetOptions()
{
resultSetOptions = System.Data.SqlServerCe.ResultSetOptions.Scrollable;
resultSetOptions = (resultSetOptions | System.Data.SqlServerCe.ResultSetOptions.Sensitive);
resultSetOptions = (resultSetOptions | System.Data.SqlServerCe.ResultSetOptions.Updatable);
}
/// <summary>
/// Creates a connection, opens it and factories a command instance from the connection
/// </summary>
/// <returns></returns>
protected SqlCeCommand CreateConnectionAndCommand()
{
sqlCeConnection = new System.Data.SqlServerCe.SqlCeConnection(ResultSetConnectionString);
sqlCeConnection.Open();
return sqlCeConnection.CreateCommand();
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -