Из javadocs :
Когда объект
blockquote>Statement
закрыт, его текущийResultSet
объект, если он существует, также закрыт.Однако javadocs не очень понятны, закрыты ли
Statement
иResultSet
, когда вы закрываете базовыйConnection
. Они просто утверждают, что закрытие Connection:Немедленно освобождает эту базу данных объекта
blockquote>Connection
и ресурсы JDBC вместо того, чтобы ждать их автоматического выхода.По-моему, всегда явно закрывайте
ResultSets
,Statements
иConnections
, когда вы закончите с ними, поскольку реализацияclose
может различаться между драйверами баз данных.Вы можете сэкономить много кода котельной пластины с использованием таких методов, как
closeQuietly
в DBUtils из Apache.
Существует свойство StringFormat (в.NET 3,5 SP1), который, вероятно, можно использовать. И полезный WPF, связывающий лист обмана, может найденный здесь . Если это не помогает, можно всегда писать собственный ValueConverter или пользовательское свойство для объекта.
Просто проверенный, можно использовать StringFormat с мультипривязкой. В Вашем случае код будет чем-то вроде этого:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat=" {0} - {1}">
<Binding Path="Number"/>
<Binding Path="Name"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
я должен был запустить строку формата с пространства, в других отношениях Visual Studio не создаст, но я думаю, что Вы найдете, что путь обходит его :)
Редактирование
, пространство необходимо в StringFormat, чтобы помешать синтаксическому анализатору рассматривать {0}
как фактическая привязка. Другие альтернативы:
<!-- use a space before the first format -->
<MultiBinding StringFormat=" {0} - {1}">
<!-- escape the formats -->
<MultiBinding StringFormat="\{0\} - \{1\}">
<!-- use {} before the first format -->
<MultiBinding StringFormat="{}{0} - {1}">
Можно также использовать связываемое выполнение. Полезный материал, особенно если Вы хотите добавить некоторое текстовое форматирование (цвета, насыщенность шрифта и т.д.).
<TextBlock>
<something:BindableRun BoundText="{Binding Number}"/>
<Run Text=" - "/>
<something:BindableRun BoundText="{Binding Name}"/>
</TextBlock>
Вот исходный класс:
Здесь некоторые дополнительные улучшения.
И это - все в одной части кода:
public class BindableRun : Run
{
public static readonly DependencyProperty BoundTextProperty = DependencyProperty.Register("BoundText", typeof(string), typeof(BindableRun), new PropertyMetadata(new PropertyChangedCallback(BindableRun.onBoundTextChanged)));
private static void onBoundTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((Run)d).Text = (string)e.NewValue;
}
public String BoundText
{
get { return (string)GetValue(BoundTextProperty); }
set { SetValue(BoundTextProperty, value); }
}
public BindableRun()
: base()
{
Binding b = new Binding("DataContext");
b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(FrameworkElement), 1);
this.SetBinding(DataContextProperty, b);
}
}