?? sqliteconnection.cs
字號:
Close();
}
/// <summary>
/// Creates a database file. This just creates a zero-byte file which SQLite
/// will turn into a database when the file is opened properly.
/// </summary>
/// <param name="databaseFileName">The file to create</param>
static public void CreateFile(string databaseFileName)
{
IO.FileStream fs = IO.File.Create(databaseFileName);
fs.Close();
}
/// <summary>
/// On NTFS volumes, this function turns on the compression attribute for the given file.
/// It must not be open or referenced at the time of the function call.
/// </summary>
/// <param name="databaseFileName">The file to compress</param>
static public void CompressFile(string databaseFileName)
{
UnsafeNativeMethods.sqlite3_compressfile(databaseFileName);
}
/// <summary>
/// On NTFS volumes, this function removes the compression attribute for the given file.
/// It must not be open or referenced at the time of the function call.
/// </summary>
/// <param name="databaseFileName">The file to decompress</param>
static public void DecompressFile(string databaseFileName)
{
UnsafeNativeMethods.sqlite3_decompressfile(databaseFileName);
}
/// <summary>
/// Raises the state change event when the state of the connection changes
/// </summary>
/// <param name="newState">The new state. If it is different from the previous state, an event is raised.</param>
internal void OnStateChange(ConnectionState newState)
{
ConnectionState oldState = _connectionState;
_connectionState = newState;
if (StateChange != null && oldState != newState)
{
StateChangeEventArgs e = new StateChangeEventArgs(oldState, newState);
StateChange(this, e);
}
}
/// <summary>
/// Creates a new SQLiteTransaction if one isn't already active on the connection.
/// </summary>
/// <param name="isolationLevel">SQLite doesn't support varying isolation levels, so this parameter is ignored.</param>
/// <param name="deferredLock">When TRUE, SQLite defers obtaining a write lock until a write operation is requested.
/// When FALSE, a writelock is obtained immediately. The default is TRUE, but in a multi-threaded multi-writer
/// environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.</param>
/// <returns>Returns a SQLiteTransaction object.</returns>
public SQLiteTransaction BeginTransaction(IsolationLevel isolationLevel, bool deferredLock)
{
return BeginTransaction(deferredLock);
}
/// <summary>
/// Creates a new SQLiteTransaction if one isn't already active on the connection.
/// </summary>
/// <param name="deferredLock">When TRUE, SQLite defers obtaining a write lock until a write operation is requested.
/// When FALSE, a writelock is obtained immediately. The default is TRUE, but in a multi-threaded multi-writer
/// environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.</param>
/// <returns>Returns a SQLiteTransaction object.</returns>
public SQLiteTransaction BeginTransaction(bool deferredLock)
{
if (_connectionState != ConnectionState.Open)
throw new InvalidOperationException();
return new SQLiteTransaction(this, deferredLock);
}
/// <summary>
/// Creates a new SQLiteTransaction if one isn't already active on the connection.
/// </summary>
/// <param name="isolationLevel">SQLite supports only serializable transactions.</param>
/// <returns>Returns a SQLiteTransaction object.</returns>
public new SQLiteTransaction BeginTransaction(IsolationLevel isolationLevel)
{
return BeginTransaction(false);
}
/// <summary>
/// Creates a new SQLiteTransaction if one isn't already active on the connection.
/// </summary>
/// <returns>Returns a SQLiteTransaction object.</returns>
public new SQLiteTransaction BeginTransaction()
{
return BeginTransaction(false);
}
/// <summary>
/// Forwards to the local BeginTransaction() function
/// </summary>
/// <param name="isolationLevel"></param>
/// <returns></returns>
protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel)
{
return BeginTransaction(false);
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="databaseName"></param>
public override void ChangeDatabase(string databaseName)
{
throw new NotImplementedException();
}
/// <summary>
/// When the database connection is closed, all commands linked to this connection are automatically reset.
/// </summary>
public override void Close()
{
if (_sql != null)
{
int x = _commandList.Count;
for (int n = 0; n < x; n++)
{
_commandList[n].ClearCommands();
}
#if !PLATFORM_COMPACTFRAMEWORK
if (_enlistment != null)
{
// If the connection is enlisted in a transaction scope and the scope is still active,
// we cannot truly shut down this connection until the scope has completed. Therefore make a
// hidden connection temporarily to hold open the connection until the scope has completed.
SQLiteConnection cnn = new SQLiteConnection();
cnn._sql = _sql;
cnn._transactionLevel = _transactionLevel;
cnn._enlistment = _enlistment;
cnn._connectionState = _connectionState;
cnn._version = _version;
cnn._enlistment._transaction._cnn = cnn;
cnn._enlistment._disposeConnection = true;
}
else
{
_sql.Close();
}
_enlistment = null;
#else
_sql.Close();
#endif
_sql = null;
_transactionLevel = 0;
}
OnStateChange(ConnectionState.Closed);
}
/// <summary>
/// The connection string containing the parameters for the connection
/// </summary>
/// <remarks>
/// <list type="table">
/// <listheader>
/// <term>Parameter</term>
/// <term>Values</term>
/// <term>Required</term>
/// <term>Default</term>
/// </listheader>
/// <item>
/// <description>Data Source</description>
/// <description>{filename}</description>
/// <description>Y</description>
/// <description></description>
/// </item>
/// <item>
/// <description>Version</description>
/// <description>3</description>
/// <description>N</description>
/// <description>3</description>
/// </item>
/// <item>
/// <description>UseUTF16Encoding</description>
/// <description><b>True</b><br/><b>False</b></description>
/// <description>N</description>
/// <description>False</description>
/// </item>
/// <item>
/// <description>DateTimeFormat</description>
/// <description><b>Ticks</b> - Use DateTime.Ticks<br/><b>ISO8601</b> - Use ISO8601 DateTime format</description>
/// <description>N</description>
/// <description>ISO8601</description>
/// </item>
/// <item>
/// <description>BinaryGUID</description>
/// <description><b>Yes/On/1</b> - Store GUID columns in binary form<br/><b>No/Off/0</b> - Store GUID columns as text</description>
/// <description>N</description>
/// <description>On</description>
/// </item>
/// <item>
/// <description>Cache Size</description>
/// <description>{size in bytes}</description>
/// <description>N</description>
/// <description>2000</description>
/// </item>
/// <item>
/// <description>Synchronous</description>
/// <description><b>Normal</b> - Normal file flushing behavior<br/><b>Full</b> - Full flushing after all writes<br/><b>Off</b> - Underlying OS flushes I/O's</description>
/// <description>N</description>
/// <description>Normal</description>
/// </item>
/// <item>
/// <description>Page Size</description>
/// <description>{size in bytes}</description>
/// <description>N</description>
/// <description>1024</description>
/// </item>
/// <item>
/// <description>Password</description>
/// <description>{password}</description>
/// <description>N</description>
/// <description></description>
/// </item>
/// <item>
/// <description>Enlist</description>
/// <description><B>Y</B> - Automatically enlist in distributed transactions<br/><b>N</b> - No automatic enlistment</description>
/// <description>N</description>
/// <description>Y</description>
/// </item>
/// </list>
/// </remarks>
#if !PLATFORM_COMPACTFRAMEWORK
[RefreshProperties(RefreshProperties.All), DefaultValue("")]
[Editor("SQLite.Designer.SQLiteConnectionStringEditor, SQLite.Designer, Version=1.0.31.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
#endif
public override string ConnectionString
{
get
{
return _connectionString;
}
set
{
if (value == null)
throw new ArgumentNullException();
else if (_connectionState != ConnectionState.Closed)
throw new InvalidOperationException();
_connectionString = value;
}
}
/// <summary>
/// Create a new SQLiteCommand and associate it with this connection.
/// </summary>
/// <returns>Returns an instantiated SQLiteCommand object already assigned to this connection.</returns>
public new SQLiteCommand CreateCommand()
{
return new SQLiteCommand(this);
}
/// <summary>
/// Forwards to the local CreateCommand() function
/// </summary>
/// <returns></returns>
protected override DbCommand CreateDbCommand()
{
return CreateCommand();
}
/// <summary>
/// Returns the filename without extension or path
/// </summary>
#if !PLATFORM_COMPACTFRAMEWORK
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
#endif
public override string DataSource
{
get
{
return _dataSource;
}
}
/// <summary>
/// Returns an empty string
/// </summary>
#if !PLATFORM_COMPACTFRAMEWORK
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
#endif
public override string Database
{
get
{
return "main";
}
}
/// <summary>
/// Parses the connection string into component parts
/// </summary>
/// <returns>An array of key-value pairs representing each parameter of the connection string</returns>
internal KeyValuePair<string, string>[] ParseConnectionString()
{
string s = _connectionString;
int n;
List<KeyValuePair<string, string>> ls = new List<KeyValuePair<string, string>>();
// First split into semi-colon delimited values. The Split() function of SQLiteBase accounts for and properly
// skips semi-colons in quoted strings
string[] arParts = SQLiteConvert.Split(s, ';');
string[] arPiece;
int x = arParts.Length;
// For each semi-colon piece, split into key and value pairs by the presence of the = sign
for (n = 0; n < x; n++)
{
arPiece = SQLiteConvert.Split(arParts[n], '=');
if (arPiece.Length == 2)
{
ls.Add(new KeyValuePair<string, string>(arPiece[0], arPiece[1]));
}
else throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, "Invalid ConnectionString format for parameter \"{0}\"", (arPiece.Length > 0) ? arPiece[0] : "null"));
}
KeyValuePair<string, string>[] ar = new KeyValuePair<string, string>[ls.Count];
ls.CopyTo(ar, 0);
// Return the array of key-value pairs
return ar;
}
#if !PLATFORM_COMPACTFRAMEWORK
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -