<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Holistic Developer</title>
    <link>http://www.holisticdeveloper.com/</link>
    <description>ho•lis•tic [hō lístik]:relating to complete systems rather than the analysis of, treatment of, or dissection into parts.</description>
    <language>en-us</language>
    <copyright>Brian Baker</copyright>
    <lastBuildDate>Sun, 15 Oct 2006 20:36:20 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>brian@holisticdeveloper.com</managingEditor>
    <webMaster>brian@holisticdeveloper.com</webMaster>
    <item>
      <trackback:ping>http://www.holisticdeveloper.com/Trackback.aspx?guid=a5663dd7-7c95-496c-977e-6b15a660bf63</trackback:ping>
      <pingback:server>http://www.holisticdeveloper.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.holisticdeveloper.com/PermaLink,guid,a5663dd7-7c95-496c-977e-6b15a660bf63.aspx</pingback:target>
      <dc:creator>Brian Baker</dc:creator>
      <wfw:comment>http://www.holisticdeveloper.com/CommentView,guid,a5663dd7-7c95-496c-977e-6b15a660bf63.aspx</wfw:comment>
      <wfw:commentRss>http://www.holisticdeveloper.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a5663dd7-7c95-496c-977e-6b15a660bf63</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.ericsink.com/">Eric Sink</a>, the founder of <a href="http://www.sourcegear.com/">SourceGear</a>,
provides an excellent <a href="http://www.ericsink.com/scm/source_control.html">set
of articles</a> on the fundamentals of using source control.  Quoting from his
introduction:
</p>
        <blockquote>
          <p>
Our universities often don't teach people how to do source control.  We graduate
with Computer Science degrees.  We know more than we'll ever need to know about
discrete math, artificial intelligence and the design of virtual memory systems. 
But many of us enter the workforce with no knowledge of how to use any of the basic
tools of software development, including bug-tracking, unit testing, code coverage,
source control, or even IDEs.
</p>
          <p>
Our employers don't teach people how to do source control.  In fact, many employers
provide their developers with no training at all.
</p>
        </blockquote>
        <p>
I've certainly seen this to be the case with a number of my clients.  Eric's
HOWTO should be required reading for any developer, even if you work as a team of
one.
</p>
        <img width="0" height="0" src="http://www.holisticdeveloper.com/aggbug.ashx?id=a5663dd7-7c95-496c-977e-6b15a660bf63" />
      </body>
      <title>Eric Sink's Source Control HOWTO</title>
      <guid isPermaLink="false">http://www.holisticdeveloper.com/PermaLink,guid,a5663dd7-7c95-496c-977e-6b15a660bf63.aspx</guid>
      <link>http://www.holisticdeveloper.com/2006/10/15/EricSinksSourceControlHOWTO.aspx</link>
      <pubDate>Sun, 15 Oct 2006 20:36:20 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.ericsink.com/"&gt;Eric Sink&lt;/a&gt;, the founder of &lt;a href="http://www.sourcegear.com/"&gt;SourceGear&lt;/a&gt;,
provides an excellent &lt;a href="http://www.ericsink.com/scm/source_control.html"&gt;set
of articles&lt;/a&gt; on the fundamentals of using source control.&amp;nbsp; Quoting from his
introduction:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Our universities often don't teach people how to do source control.&amp;nbsp; We graduate
with Computer Science degrees.&amp;nbsp; We know more than we'll ever need to know about
discrete math, artificial intelligence and the design of virtual memory systems.&amp;nbsp;
But many of us enter the workforce with no knowledge of how to use any of the basic
tools of software development, including bug-tracking, unit testing, code coverage,
source control, or even IDEs.
&lt;/p&gt;
&lt;p&gt;
Our employers don't teach people how to do source control.&amp;nbsp; In fact, many employers
provide their developers with no training at all.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I've certainly seen this to be the case with a number of my clients.&amp;nbsp; Eric's
HOWTO should be required reading for any developer, even if you work as a team of
one.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.holisticdeveloper.com/aggbug.ashx?id=a5663dd7-7c95-496c-977e-6b15a660bf63" /&gt;</description>
      <comments>http://www.holisticdeveloper.com/CommentView,guid,a5663dd7-7c95-496c-977e-6b15a660bf63.aspx</comments>
      <category>Source Control</category>
    </item>
    <item>
      <trackback:ping>http://www.holisticdeveloper.com/Trackback.aspx?guid=ad88318d-3e8c-42db-9203-1ade6338d236</trackback:ping>
      <pingback:server>http://www.holisticdeveloper.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.holisticdeveloper.com/PermaLink,guid,ad88318d-3e8c-42db-9203-1ade6338d236.aspx</pingback:target>
      <dc:creator>Brian Baker</dc:creator>
      <wfw:comment>http://www.holisticdeveloper.com/CommentView,guid,ad88318d-3e8c-42db-9203-1ade6338d236.aspx</wfw:comment>
      <wfw:commentRss>http://www.holisticdeveloper.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ad88318d-3e8c-42db-9203-1ade6338d236</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently one of my clients deployed an ASP.NET web application to their public web
farm.  Since this application made use of session state, they elected to store
the session data in SQL Server.  The application ran fine for a couple months
but then began exhibiting some problems.  Specifically, the following errors
occurred:
</p>
        <blockquote>
          <p>
SELECT permission denied on object 'ASPStateTempApplications', database 'tempdb',
owner 'dbo'. 
<br />
INSERT permission denied on object 'ASPStateTempApplications', database 'tempdb',
owner 'dbo'. 
<br />
SELECT permission denied on object 'ASPStateTempApplications', database 'tempdb',
owner 'dbo'. 
</p>
        </blockquote>
        <p>
and
</p>
        <blockquote>
          <p>
System.Data.SqlClient.SqlException: A severe error occurred on the current command. 
The results, if any, should be discarded.<br />
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior,
RunBehavior runBehavior, Boolean returnStream)<br />
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()<br />
   at System.Web.SessionState.SqlStateClientManager.SetAsyncWorker(String
id, SessionStateItem item, Byte[] buf, Int32 length, Boolean inStorage)
</p>
        </blockquote>
        <p>
Unfortunately, a search of the Microsoft KnowledgeBase didn't turn up any results. 
Time for some old-fashioned sleuthing!
</p>
        <p>
I found an <a href="http://idunno.org/dotNet/sessionState.aspx">article</a> by <a href="http://idunno.org/">Barry
Dorrans</a> that pointed to the problem being the "<a href="http://support.microsoft.com/kb/810474">Cross-Database
Ownership Chaining</a>" feature and its change in behavior starting with SP3 for SQL
Server 2000.
</p>
        <p>
In addition to the information found there, I also <a href="http://forums.asp.net/thread/132551.aspx">discovered</a> (thanks
to <a href="http://www.carlprothman.net">Carl Prothman</a>) that the database owner
of the ASPState database still needed to be set to "sa" even if trusted connections
were not being used.
</p>
        <p>
To roll the whole thing up, I created the following script to set the necessary
permissions for the database and to set the options referenced above.  You'll
need to change all references to "aspnet_user" to the appropriate SQL Server login
on your server.
</p>
        <blockquote>
          <pre class="csharpcode">
            <span class="kwrd">USE</span> master <span class="kwrd">go</span><span class="kwrd">EXEC</span> sp_dboption <span class="str">'ASPState'</span>, <span class="str">'db
chaining'</span>, <span class="str">'true'</span><span class="kwrd">go</span><span class="kwrd">USE</span> ASPState <span class="kwrd">GO</span> sp_changedbowner <span class="str">'sa'</span>,<span class="str">'true'</span><span class="kwrd">GO</span> sp_grantdbaccess <span class="str">'aspnet_user'</span>, <span class="str">'aspnet_user'</span><span class="kwrd">GO</span><span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempGetAppID <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempGetStateItem <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempGetStateItem2 <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempGetStateItemExclusive <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempGetStateItemExclusive2 <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempInsertStateItemLong <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempInsertStateItemShort <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempReleaseStateItemExclusive <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempRemoveStateItem <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempResetTimeout <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempUpdateStateItemLong <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempUpdateStateItemLongNullShort <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempUpdateStateItemShort <span class="kwrd">to</span> aspnet_user <span class="kwrd">GRANT</span><span class="kwrd">EXEC</span><span class="kwrd">on</span> TempUpdateStateItemShortNullLong <span class="kwrd">to</span> aspnet_user <span class="kwrd">GO</span></pre>
        </blockquote>
        <p>
Hopefully Microsoft will address this issue with a KnowledgeBase article soon!
</p>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <img width="0" height="0" src="http://www.holisticdeveloper.com/aggbug.ashx?id=ad88318d-3e8c-42db-9203-1ade6338d236" />
      </body>
      <title>Fixing ASP.NET Session State After Applying SQL Server 2000 SP3</title>
      <guid isPermaLink="false">http://www.holisticdeveloper.com/PermaLink,guid,ad88318d-3e8c-42db-9203-1ade6338d236.aspx</guid>
      <link>http://www.holisticdeveloper.com/2006/10/12/FixingASPNETSessionStateAfterApplyingSQLServer2000SP3.aspx</link>
      <pubDate>Thu, 12 Oct 2006 21:43:51 GMT</pubDate>
      <description>&lt;p&gt;
Recently one of my clients deployed an ASP.NET web application to their public web
farm.&amp;nbsp; Since this application made use of session state, they elected to store
the session data in SQL Server.&amp;nbsp; The application ran fine for a couple months
but then began exhibiting some problems.&amp;nbsp; Specifically, the following errors
occurred:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
SELECT permission denied on object 'ASPStateTempApplications', database 'tempdb',
owner 'dbo'. 
&lt;br&gt;
INSERT permission denied on object 'ASPStateTempApplications', database 'tempdb',
owner 'dbo'. 
&lt;br&gt;
SELECT permission denied on object 'ASPStateTempApplications', database 'tempdb',
owner 'dbo'. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
and
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
System.Data.SqlClient.SqlException: A severe error occurred on the current command.&amp;nbsp;
The results, if any, should be discarded.&lt;br&gt;
&amp;nbsp;&amp;nbsp; at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior,
RunBehavior runBehavior, Boolean returnStream)&lt;br&gt;
&amp;nbsp;&amp;nbsp; at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()&lt;br&gt;
&amp;nbsp;&amp;nbsp; at System.Web.SessionState.SqlStateClientManager.SetAsyncWorker(String
id, SessionStateItem item, Byte[] buf, Int32 length, Boolean inStorage)
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Unfortunately, a search of the Microsoft KnowledgeBase didn't turn up any results.&amp;nbsp;
Time for some old-fashioned sleuthing!
&lt;/p&gt;
&lt;p&gt;
I found an &lt;a href="http://idunno.org/dotNet/sessionState.aspx"&gt;article&lt;/a&gt; by &lt;a href="http://idunno.org/"&gt;Barry
Dorrans&lt;/a&gt; that pointed to the problem being the "&lt;a href="http://support.microsoft.com/kb/810474"&gt;Cross-Database
Ownership Chaining&lt;/a&gt;" feature and its change in behavior starting with SP3 for SQL
Server 2000.
&lt;/p&gt;
&lt;p&gt;
In addition to the information found there, I also &lt;a href="http://forums.asp.net/thread/132551.aspx"&gt;discovered&lt;/a&gt; (thanks
to &lt;a href="http://www.carlprothman.net"&gt;Carl Prothman&lt;/a&gt;) that the database owner
of the ASPState database still needed to be set to "sa" even if trusted connections
were not being used.
&lt;/p&gt;
&lt;p&gt;
To roll the whole thing up, I created the following&amp;nbsp;script&amp;nbsp;to set the necessary
permissions for the database and to set the options referenced above.&amp;nbsp; You'll
need to change all references to "aspnet_user" to the appropriate SQL Server login
on your server.
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class=csharpcode&gt;&lt;span class=kwrd&gt;USE&lt;/span&gt; master &lt;span class=kwrd&gt;go&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; sp_dboption &lt;span class=str&gt;'ASPState'&lt;/span&gt;, &lt;span class=str&gt;'db
chaining'&lt;/span&gt;, &lt;span class=str&gt;'true'&lt;/span&gt; &lt;span class=kwrd&gt;go&lt;/span&gt; &lt;span class=kwrd&gt;USE&lt;/span&gt; ASPState &lt;span class=kwrd&gt;GO&lt;/span&gt; sp_changedbowner &lt;span class=str&gt;'sa'&lt;/span&gt;,&lt;span class=str&gt;'true'&lt;/span&gt; &lt;span class=kwrd&gt;GO&lt;/span&gt; sp_grantdbaccess &lt;span class=str&gt;'aspnet_user'&lt;/span&gt;, &lt;span class=str&gt;'aspnet_user'&lt;/span&gt; &lt;span class=kwrd&gt;GO&lt;/span&gt; &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempGetAppID &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempGetStateItem &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempGetStateItem2 &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempGetStateItemExclusive &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempGetStateItemExclusive2 &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempInsertStateItemLong &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempInsertStateItemShort &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempReleaseStateItemExclusive &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempRemoveStateItem &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempResetTimeout &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempUpdateStateItemLong &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempUpdateStateItemLongNullShort &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempUpdateStateItemShort &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GRANT&lt;/span&gt; &lt;span class=kwrd&gt;EXEC&lt;/span&gt; &lt;span class=kwrd&gt;on&lt;/span&gt; TempUpdateStateItemShortNullLong &lt;span class=kwrd&gt;to&lt;/span&gt; aspnet_user &lt;span class=kwrd&gt;GO&lt;/span&gt; &lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Hopefully Microsoft will address this issue with a KnowledgeBase article soon!
&lt;/p&gt;
&lt;style type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;img width="0" height="0" src="http://www.holisticdeveloper.com/aggbug.ashx?id=ad88318d-3e8c-42db-9203-1ade6338d236" /&gt;</description>
      <comments>http://www.holisticdeveloper.com/CommentView,guid,ad88318d-3e8c-42db-9203-1ade6338d236.aspx</comments>
      <category>ASP.NET;SQL Server</category>
    </item>
  </channel>
</rss>