<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Maciej Grabek &#187; SQL</title>
	<atom:link href="https://blog.maciejgrabek.com/tag/sql/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.maciejgrabek.com</link>
	<description>/* Make it See Sharp - Windows Phone, C#, .NET i nie tylko */</description>
	<lastBuildDate>Mon, 27 Oct 2014 11:18:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>WP7 &#8211; Database tip</title>
		<link>https://blog.maciejgrabek.com/2012/03/06/wp7-database-tip/</link>
		<comments>https://blog.maciejgrabek.com/2012/03/06/wp7-database-tip/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 20:02:22 +0000</pubDate>
		<dc:creator><![CDATA[maciek]]></dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://maciejgrabek.com/?p=11239</guid>
		<description><![CDATA[Jednym z najbardziej rozpowszechnionych błędów związanych z aplikacjami na WP7 korzystającymi z bazy danych jest błąd inicjowania tabel. Objawiał się on informacją o nieistniejących tabelach w momencie gdy przy tworzeniu bazy nie zostały do niej dodane żadne wpisy. Okazuje się, że po zainstalowaniu aktualizacji WP 7.1.1 błędu tego nie udało mi się już zreprodukować. Tak to jest, gdy posty zalegają w kolejce i nie zawsze jest czas, żeby na spokojnie je opisać Niemniej jednak &#8211; jeżeli tworzymy bazę danych warto do niej dodać przykładowy wpis (najlepiej do dodatkowej, fakeowej tabeli). Dzięki temu silnik SQL CE poprawnie zainicjuje wszystkie tabele co pozwoli uniknąć problemu nieistniejących tabel. Dlaczego? Ponieważ nawet jeżeli błąd jest poprawiony w nowych uaktualnieniach, to nie mamy grawancji, że każdy użytkownik kożysta z najnowszej wersji systemu (dystrybucja uaktualnień u operatorów niestety różnie trwa, szczególnie w przypadku telefonów z USA brandowanych przez AT&#38;A). Inny problem, na który chciałbym zwrócić uwagę jest dużo bardziej prozaiczny. Chodzi o sposób eksponowania tabel w klasie kontekstu bazy danych. Przyzwyczajenie do właściwości (properties) okazuje się tu niestety zabójcze dla projektu. Wyobraźmy sobie poniższy kod: 1 2 3 4 5 6 7 8 9 public class SampleDataContext : DataContext &#123; public SampleDataContext&#40;string connectionString&#41; : base&#40;connectionString&#41; &#123;<a href="https://blog.maciejgrabek.com/2012/03/06/wp7-database-tip/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p>Jednym z najbardziej rozpowszechnionych błędów związanych z aplikacjami na WP7 korzystającymi z bazy danych jest błąd inicjowania tabel. Objawiał się on informacją o nieistniejących tabelach w momencie gdy przy tworzeniu bazy nie zostały do niej dodane żadne wpisy. Okazuje się, że po zainstalowaniu <a href="http://maciejgrabek.com/2012/03/04/windows-phone-sdk-7-1-1-update-ctp/" target="_blank">aktualizacji WP 7.1.1</a> błędu tego nie udało mi się już zreprodukować. Tak to jest, gdy posty zalegają w kolejce i nie zawsze jest czas, żeby na spokojnie je opisać <img src="https://blog.maciejgrabek.com/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Niemniej jednak &#8211; jeżeli tworzymy bazę danych warto do niej dodać przykładowy wpis (najlepiej do dodatkowej, fakeowej tabeli). Dzięki temu silnik SQL CE poprawnie zainicjuje wszystkie tabele co pozwoli uniknąć problemu nieistniejących tabel. Dlaczego? Ponieważ nawet jeżeli błąd jest poprawiony w nowych uaktualnieniach, to nie mamy grawancji, że każdy użytkownik kożysta z najnowszej wersji systemu (dystrybucja uaktualnień u operatorów niestety różnie trwa, szczególnie w przypadku telefonów z USA brandowanych przez AT&amp;A).</p>
<p>Inny problem, na który chciałbym zwrócić uwagę jest dużo bardziej prozaiczny. Chodzi o sposób eksponowania tabel w klasie kontekstu bazy danych. Przyzwyczajenie do właściwości (properties) okazuje się tu niestety zabójcze dla projektu.</p>
<p>Wyobraźmy sobie poniższy kod:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> SampleDataContext <span style="color: #008000;">:</span> DataContext
<span style="color: #008000;">&#123;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> SampleDataContext<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> connectionString<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">:</span> <span style="color: #0600FF; font-weight: bold;">base</span><span style="color: #008000;">&#40;</span>connectionString<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">public</span> Table<span style="color: #008000;">&lt;</span>SampleEntry<span style="color: #008000;">&gt;</span> DataEntries <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">get</span><span style="color: #008000;">;</span> <span style="color: #0600FF; font-weight: bold;">set</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Okazuje się, że po jego uruchomieniu każda próba odwołania się do tabeli otrzymujemy błąd jak na poniższym screenie (Value can not be null):</p>
<p><img class="alignnone size-full wp-image-11240" title="DBValueCannotBeNull" src="http://maciejgrabek.com/wp-content/uploads/2012/03/DBValueCannotBeNull.png" alt="" width="472" height="358" /></p>
<p>Okazuje się, że w takim przypadku rozwiązanie zakrawa wręcz o banał, ponieważ wystarczy usunąć dodaną przez nas podświadomie deklarację gettera i settera czyli <span style="text-decoration: underline;"><em><strong>{ get; set; }</strong></em></span> przy definicji tabeli &#8211; zamiast propercji powinna ona być zwykłym polem, o czym warto pamiętać, bo może wam to zaoszczędzić ładny kawałek czasu &#8211; w moim przypadku ta &#8220;pomyłka&#8221; kosztowała 3 godziny <img src="https://blog.maciejgrabek.com/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.maciejgrabek.com/2012/03/06/wp7-database-tip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prawda o SqlCommand.Parameters</title>
		<link>https://blog.maciejgrabek.com/2010/12/31/prawda-o-sqlcommand-parameters/</link>
		<comments>https://blog.maciejgrabek.com/2010/12/31/prawda-o-sqlcommand-parameters/#comments</comments>
		<pubDate>Thu, 30 Dec 2010 23:00:37 +0000</pubDate>
		<dc:creator><![CDATA[maciek]]></dc:creator>
				<category><![CDATA[Ciekawostki]]></category>
		<category><![CDATA[HOW TO]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SqlCommand]]></category>

		<guid isPermaLink="false">http://maciejgrabek.com/?p=10470</guid>
		<description><![CDATA[Czy zastanawialiście się kiedyś jak dodawać parametry do SqlCommand? Klasa ta zawiera pole Parameters typy SqlParameterCollection, na którym możemy wykonać między innymi metodę AddWithValue(string, object). W internecie jak i w dokumentacji w nazwach parametrów na początku jest zawsze użyty znak &#8220;@&#8221;. Przy okazji jednego z projektów musiałem odpowiedzieć sobie na pytanie: Czy muszę zadbać o &#8220;@&#8221; przy nazwie parametru? Nie zastanawiając się długo postanowiłem, zgodnie duchem empiryzmu, sprawdzić co się stanie w poszczególnych sytuacjach. Baza danych. Dla testów mała baza danych z jedną procedurą pobierającą dwa parametry: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE DATABASE SqlCmdParametersTest USE &#91;SqlCmdParametersTest&#93; CREATE PROCEDURE &#91;dbo&#93;.&#91;spTest&#93; @Param1 INT, @Param2 INT AS BEGIN SET NOCOUNT ON; SELECT @Param1 Col1, @Param2 Col2END GO -- TEST EXEC &#91;dbo&#93;.&#91;spTest&#93; 1, 2 EXEC &#91;dbo&#93;.&#91;spTest&#93; @Param1=1, @Param2=2 EXEC &#91;dbo&#93;.&#91;spTest&#93; @Param2=1, @Param1=2 Aplikacja testowa Teraz nie pozostaje nic innego jak przygotować małą aplikację konsolową, która skorzysta z tej procedury. Wiadomo, że podstawowym sposobem dodawania parametrów jest użycie &#8220;@&#8221; na początku nazwy, zatem będzie to pierwszy sposób użycia. Jako drugi przypadek weźmiemy parametr bez tego znaku. Czy to wszystkie możliwości? Nie &#8211; można to przecież jeszcze połączyć i użyć raz z &#8220;@&#8221; a<a href="https://blog.maciejgrabek.com/2010/12/31/prawda-o-sqlcommand-parameters/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p>Czy zastanawialiście się kiedyś jak dodawać parametry do<strong> <em>SqlCommand</em></strong>? Klasa ta zawiera pole <strong><em>Parameters</em></strong> typy SqlParameterCollection, na którym możemy wykonać między innymi metodę <em>AddWithValue(string, object).</em> W internecie jak i w <a href="http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx" target="_blank">dokumentacji</a> w nazwach parametrów na początku jest zawsze użyty znak &#8220;@&#8221;.</p>
<p>Przy okazji jednego z projektów musiałem odpowiedzieć sobie na pytanie: <em><span style="text-decoration: underline;">Czy muszę zadbać o &#8220;@&#8221; przy nazwie parametru?</span></em> Nie zastanawiając się długo postanowiłem, zgodnie duchem empiryzmu, sprawdzić co się stanie w poszczególnych sytuacjach.</p>
<h3>Baza danych.</h3>
<p>Dla testów mała baza danych z jedną procedurą pobierającą dwa parametry:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">DATABASE</span> SqlCmdParametersTest
<span style="color: #993333; font-weight: bold;">USE</span> <span style="color: #66cc66;">&#91;</span>SqlCmdParametersTest<span style="color: #66cc66;">&#93;</span>
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">PROCEDURE</span> <span style="color: #66cc66;">&#91;</span>dbo<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>spTest<span style="color: #66cc66;">&#93;</span>
	@Param1 <span style="color: #993333; font-weight: bold;">INT</span><span style="color: #66cc66;">,</span>
	@Param2 <span style="color: #993333; font-weight: bold;">INT</span>
<span style="color: #993333; font-weight: bold;">AS</span>
<span style="color: #993333; font-weight: bold;">BEGIN</span>
	<span style="color: #993333; font-weight: bold;">SET</span> NOCOUNT <span style="color: #993333; font-weight: bold;">ON</span>;
	<span style="color: #993333; font-weight: bold;">SELECT</span>
 		@Param1 Col1<span style="color: #66cc66;">,</span>
		@Param2 Col2END
<span style="color: #993333; font-weight: bold;">GO</span>
<span style="color: #808080; font-style: italic;">-- TEST</span>
<span style="color: #993333; font-weight: bold;">EXEC</span> <span style="color: #66cc66;">&#91;</span>dbo<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>spTest<span style="color: #66cc66;">&#93;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">2</span>
<span style="color: #993333; font-weight: bold;">EXEC</span> <span style="color: #66cc66;">&#91;</span>dbo<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>spTest<span style="color: #66cc66;">&#93;</span> @Param1<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> @Param2<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">2</span>
<span style="color: #993333; font-weight: bold;">EXEC</span> <span style="color: #66cc66;">&#91;</span>dbo<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>spTest<span style="color: #66cc66;">&#93;</span> @Param2<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> @Param1<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">2</span></pre></td></tr></table></div>

<h3>Aplikacja testowa</h3>
<p>Teraz nie pozostaje nic innego jak przygotować małą aplikację konsolową, która skorzysta z tej procedury. Wiadomo, że podstawowym sposobem dodawania parametrów jest użycie &#8220;@&#8221; na początku nazwy, zatem będzie to pierwszy sposób użycia. Jako drugi przypadek weźmiemy parametr bez tego znaku. Czy to wszystkie możliwości? Nie &#8211; można to przecież jeszcze połączyć i użyć raz z &#8220;@&#8221; a raz bez &#8211; ot tak, żeby było trudniej. Zatem do dzieła:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Data</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Data.SqlClient</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> SqlCmdParametersTest
<span style="color: #008000;">&#123;</span>
    <span style="color: #6666cc; font-weight: bold;">class</span> Program
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008000;">&#40;</span>SqlConnection sqlConn <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlConnection<span style="color: #008000;">&#40;</span><span style="color: #666666;">@&quot;Data Source=localhost;Initial Catalog=SqlCmdParametersTest;Integrated Security=SSPI;Persist Security Info=true&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                sqlConn<span style="color: #008000;">.</span><span style="color: #0000FF;">Open</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008000;">&#40;</span>SqlCommand sqlCmd <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlCommand<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">CommandType</span> <span style="color: #008000;">=</span> CommandType<span style="color: #008000;">.</span><span style="color: #0000FF;">StoredProcedure</span><span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Connection</span> <span style="color: #008000;">=</span> sqlConn<span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">CommandText</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;[dbo].[spTest]&quot;</span><span style="color: #008000;">;</span>
&nbsp;
                    <span style="color: #008080; font-style: italic;">//call with @</span>
                    Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;With @&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Parameters</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Parameters</span><span style="color: #008000;">.</span><span style="color: #0000FF;">AddWithValue</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;@Param1&quot;</span>, <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Parameters</span><span style="color: #008000;">.</span><span style="color: #0000FF;">AddWithValue</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;@Param2&quot;</span>, <span style="color: #FF0000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008000;">&#40;</span>SqlDataReader reader <span style="color: #008000;">=</span> sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">ExecuteReader</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
                    <span style="color: #008000;">&#123;</span>
                        ReadResult<span style="color: #008000;">&#40;</span>reader<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #008000;">&#125;</span>
&nbsp;
                    <span style="color: #008080; font-style: italic;">//call without @</span>
                    Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Without @&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Parameters</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Parameters</span><span style="color: #008000;">.</span><span style="color: #0000FF;">AddWithValue</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Param1&quot;</span>, <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Parameters</span><span style="color: #008000;">.</span><span style="color: #0000FF;">AddWithValue</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Param2&quot;</span>, <span style="color: #FF0000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008000;">&#40;</span>SqlDataReader reader <span style="color: #008000;">=</span> sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">ExecuteReader</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
                    <span style="color: #008000;">&#123;</span>
                        ReadResult<span style="color: #008000;">&#40;</span>reader<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #008000;">&#125;</span>
&nbsp;
                    <span style="color: #008080; font-style: italic;">//call mixed</span>
                    Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Mixed&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Parameters</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Parameters</span><span style="color: #008000;">.</span><span style="color: #0000FF;">AddWithValue</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;@Param1&quot;</span>, <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Parameters</span><span style="color: #008000;">.</span><span style="color: #0000FF;">AddWithValue</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Param2&quot;</span>, <span style="color: #FF0000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008000;">&#40;</span>SqlDataReader reader <span style="color: #008000;">=</span> sqlCmd<span style="color: #008000;">.</span><span style="color: #0000FF;">ExecuteReader</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
                    <span style="color: #008000;">&#123;</span>
                        ReadResult<span style="color: #008000;">&#40;</span>reader<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #008000;">&#125;</span>
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadLine</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> ReadResult<span style="color: #008000;">&#40;</span>SqlDataReader reader<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>reader<span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Result:&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{0} {1}&quot;</span>, reader<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;Col1&quot;</span><span style="color: #008000;">&#93;</span>, reader<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;Col2&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">else</span>
            <span style="color: #008000;">&#123;</span>
                Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Result is empty&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Wynik dziąłania aplikacji widać na rysunku poniżej:</p>
<p><a href="http://maciejgrabek.com/wp-content/uploads/2010/12/SqlCmdParametersTestResult.png" target="_blank"><img class="alignnone size-medium wp-image-10474" title="SqlCmdParametersTestResult" src="http://maciejgrabek.com/wp-content/uploads/2010/12/SqlCmdParametersTestResult-300x104.png" alt="SqlCmdParametersTestResult" width="300" height="104" /></a></p>
<p>Jak widać wynik jest zgodny z oczekiwaniami &#8211; wszystko działa poprawnie, nawet &#8220;mix&#8221;. Warto jeszcze sprawdzić co dociera do SQL Servera, bo może to on jest tą &#8220;sprytną stroną&#8221;&#8230; Po uruchomieniu SQL Profilera widzimy, że jednak krok ku wygodzie a przede wszystkim swobodzie jest po stronie .NET Framework.</p>
<p><a href="http://maciejgrabek.com/wp-content/uploads/2010/12/SqlCmdParametersTestProfiler.png" target="_blank"><img class="alignnone size-medium wp-image-10473" title="SqlCmdParametersTestSqlProfiler" src="http://maciejgrabek.com/wp-content/uploads/2010/12/SqlCmdParametersTestProfiler-300x46.png" alt="SqlCmdParametersTestSqlProfiler" width="300" height="46" /></a></p>
<h3>Wniosek</h3>
<p>Z SqlCommand.Parameters można korzystać swobodnie i bez martwienia się o &#8220;@&#8221; lub jej brak.</p>
<p><a href="http://maciejgrabek.com/wp-content/uploads/2010/12/SqlCmdParametersTest.zip" target="_blank">Paczka do pobrania</a></p>
]]></content:encoded>
			<wfw:commentRss>https://blog.maciejgrabek.com/2010/12/31/prawda-o-sqlcommand-parameters/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
