<?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; .NET Framework</title>
	<atom:link href="https://blog.maciejgrabek.com/tag/net-framework/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>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>
