本文整理汇总了C#中QueryResult.addField方法的典型用法代码示例。如果您正苦于以下问题:C# QueryResult.addField方法的具体用法?C# QueryResult.addField怎么用?C# QueryResult.addField使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QueryResult
的用法示例。
在下文中一共展示了QueryResult.addField方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: query
/**
* Выполняет SQL-запрос к БД на выборку данных.
*
* @param sql Строка SQL-запроса
*
* @return QueryResult Возвращает число затронутых записей в таблицах
* @throw DatabaseException
*/
public QueryResult query(string sql)
{
if (!this.openConnection()) {
throw new DatabaseException("SQLite database is not open.");
}
IntPtr stmHandle = _prepare(sql);
int i;
int columnCount = sqlite3_column_count(stmHandle);
QueryResult result = new QueryResult();
for (i = 0; i < columnCount; i++) {
string columnName = Marshal.PtrToStringAnsi(sqlite3_column_name(stmHandle, i));
result.addField(columnName);
}
while (sqlite3_step(stmHandle) == SQLITE_ROW) {
object[] row = new object[columnCount];
for (i = 0; i < columnCount; i++) {
switch (sqlite3_column_type(stmHandle, i)) {
case SQLITE_INTEGER:
row[i] = sqlite3_column_int(stmHandle, i);
break;
case SQLITE_TEXT:
IntPtr text = sqlite3_column_text(stmHandle, i);
row[i] = Marshal.PtrToStringAnsi(text);
break;
case SQLITE_FLOAT:
row[i] = sqlite3_column_double(stmHandle, i);
break;
case SQLITE_BLOB:
IntPtr blob = sqlite3_column_blob(stmHandle, i);
int size = sqlite3_column_bytes(stmHandle, i);
byte[] data = new byte[size];
Marshal.Copy(blob, data, 0, size);
row[i] = data;
break;
case SQLITE_NULL:
row[i] = null;
break;
}
}
result.addRow(row);
}
try {
_finalize(stmHandle);
} finally {
this.closeConnection();
}
return result;
}