 public protocol DatabaseValueConvertible {
 	/// Convert `self` to a database value
 	///
-	/// - returns: A `DatabaseValue` representing `self`
+	/// - returns: A database value representing `self`
 	func toDatabaseValue() -> DatabaseValue
 
 	/// Convert a database value to the type of `Self`
 	///
 	/// - parameter value: The database value to convert
 	/// - returns: An instance of `Self` or `nil`
-	static func fromDatabaseValue(_ value: DatabaseValue) -> Self?
+	/// - throws: An error if the database value contains an illegal value
+	static func fromDatabaseValue(_ value: DatabaseValue) throws -> Self?
 }
 
 /// Parameter binding for convertible types
 extension Statement {
-	/// Bind a value to a statement parameter
+	/// Bind a value to an SQL parameter
 	///
 	/// Parameter indexes are 1-based.  The leftmost parameter in a statement has index 1.
 	/// - parameter value: The desired value of the parameter

		try bind(value: value.toDatabaseValue(), toParameter: name)
	}

	/// Bind a sequence of values to statement parameters
	///
	/// - parameter values: A sequence of `DatabaseValueConvertible` instances to bind
	/// - throws: `DatabaseError`
	public func bind<S: Sequence, T: DatabaseValueConvertible>(_ values: S) throws where S.Iterator.Element == Optional<T> {
		var index = 1
		for value in values {
			if let value = value {
				try bind(value: value.toDatabaseValue(), toParameter: index)
			}
			else {
				try bind(value: DatabaseValue.null, toParameter: index)
			}
			index += 1
		}
	}

	/// Bind a sequence of values to statement parameters
	///
	/// - parameter values: A sequence of `DatabaseValueConvertible` instances to bind
	/// - throws: `DatabaseError`
	public func bind<S: Sequence, T: DatabaseValueConvertible>(_ values: S) throws where S.Iterator.Element == (String, Optional<T>) {
		for (key, value) in values {
			if let value = value {
				try bind(value: value.toDatabaseValue(), toParameter: key)
			}
			else {
				try bind(value: DatabaseValue.null, toParameter: key)
			}
		}
	}


		try bind(value: value.toDatabaseValue(), toParameter: index)
	}

	/// Bind a value to a named SQL parameter
	///
	/// Parameter indexes are 1-based.  The leftmost parameter in a statement has index 1.
	/// - parameter value: The desired value of the parameter
