<feed version="0.3" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns="http://purl.org/atom/ns#" xml:lang="en-US"><title>Mihai Bejenariu Blog</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/default.aspx" /><tagline type="text/html" /><id>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/default.aspx</id><author><url>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/default.aspx</url></author><generator url="http://communityserver.org" version="1.0.1.50214">Community Server</generator><modified>2005-07-14T03:35:00Z</modified><entry><title>Design Patterns</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/archive/2006/03/27/136400.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:136400</id><created>2006-03-27T07:18:00Z</created><content type="text/html" mode="escaped">Amazing how graceful Martin Fowlers can talk about patterns.
I rediscovered with pleasure one of its books:

&lt;p class="MsoNormal"&gt;&lt;a href="http://www.martinfowler.com/books.html"&gt;http://www.martinfowler.com/books.html&lt;/a&gt;.
&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;Also, I would like remember here my favorite site about
patterns:&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;a href="http://www.dofactory.com/Patterns/Patterns.aspx"&gt;http://www.dofactory.com/Patterns/Patterns.aspx&lt;/a&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;Happy design patterns :)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=136400" width="1" height="1"&gt;</content><slash:comments>741</slash:comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/commentrss.aspx?PostID=136400</wfw:commentRss></entry><entry><title>How to: Killing SQL Server Processes</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/archive/2005/09/02/132319.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:132319</id><created>2005-09-02T00:46:00Z</created><content type="text/html" mode="escaped">&lt;p class="MsoNormal"&gt;Inactive processes can quickly eat up connections to your
SQL Server databases, dramatically limiting the number of connections available
for other work. &lt;o:p&gt;&lt;br&gt;
&lt;/o:p&gt;&lt;br&gt;
Gettting information about &lt;b&gt;locks&lt;/b&gt; can be done using sp_lock system procedure.&lt;br&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
Kill a process from from Enterprise Manager:&lt;br&gt;
1. Expand a server group, and then expand a server.&lt;br&gt;
2. Expand Management, and then expand Current Activity.&lt;br&gt;
3. Click Process Info. &lt;span&gt;&amp;nbsp;&lt;/span&gt;The current server activity is displayed in
the details pane.&lt;br&gt;
4. In the details pane, right-click a Process ID, and then
click Kill Process.&lt;br&gt;
5. Confirm that the process has terminated. &lt;o:p&gt;&lt;br&gt;
&lt;/o:p&gt;&lt;br&gt;
Also, you can dynamically terminate a particular process by
executing a kill statement, such as&lt;br&gt;
kill n&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Current process&lt;/b&gt;&lt;br&gt;
Use @@SPID for getting the server process identifier (ID) of
the current user process.&lt;/p&gt;







&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;Sample:&lt;br&gt;
SELECT @@SPID AS 'ID', SYSTEM_USER AS 'Login Name', USER AS
'User Name'&lt;/p&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=132319" width="1" height="1"&gt;</content><slash:comments>4135</slash:comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/commentrss.aspx?PostID=132319</wfw:commentRss></entry><entry><title>NUnitForms - automate your testing</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/archive/2005/09/02/132318.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:132318</id><created>2005-09-02T00:41:00Z</created><content type="text/html" mode="escaped">&lt;p&gt;&lt;span&gt;NUnitForms is an NUnit extension for unit
and acceptance testing of Windows Forms applications. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;span&gt;Your NUnit tests can open a window and
interact with the controls. Your tests will automatically manipulate and verify
the properties of the GUI. NUnitForms takes care of cleaning up your forms
between tests, detecting and handling modal dialog boxes, and verifying that
your expectations for the test are fulfilled.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;span&gt;See below the first NUnitForms test. It
shows a form, write a test in textbox control and then it clicks a button.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


























&lt;p class="MsoNormal"&gt;[TestFixture]&lt;br&gt;
public class BatchSecurityTester: NUnitFormTest&lt;br&gt;
{&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span&gt;            &lt;/span&gt;[Test]&lt;br&gt;
&lt;span&gt;            &lt;/span&gt;public void
AddNewGroup()&lt;br&gt;
&lt;span&gt;            &lt;/span&gt;{&lt;br&gt;
&lt;span&gt;                       
&lt;/span&gt;//Show
the form&lt;br&gt;
&lt;span&gt;                       
&lt;/span&gt;MyForm
form = new MyForm();&lt;br&gt;
&lt;span&gt;                       
&lt;/span&gt;form.Show();&lt;o:p&gt; &lt;br&gt;
&lt;/o:p&gt;&lt;/p&gt;









&lt;p class="MsoNormal"&gt;&lt;span&gt;                       
&lt;/span&gt;//Enter
text 'NewGroup' in txtGroupName control&lt;br&gt;
&lt;span&gt;                       
&lt;/span&gt;TextBoxTester
txtGroupName = new TextBoxTester("txtGroupName");&lt;br&gt;
&lt;span&gt;                       
&lt;/span&gt;txtGroupName.Enter("NewGroup");&lt;o:p&gt; &lt;br&gt;
&lt;/o:p&gt;&lt;/p&gt;














&lt;p class="MsoNormal"&gt;&lt;span&gt;                       
&lt;/span&gt;//Press
btnOK control&lt;br&gt;
&lt;span&gt;                       
&lt;/span&gt;ButtonTester
btnOK = new ButtonTester("btnOK");&lt;br&gt;
&lt;span&gt;                       
&lt;/span&gt;btnOK.Click();
&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;         &lt;br&gt;
            &lt;/span&gt;}&lt;br&gt;
}&lt;/p&gt;







&lt;p class="MsoNormal"&gt;Automate testing is a powerful tool complementary to unit tests.&lt;br&gt;
Happy (extreme programming) coding!&lt;br&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;P.S. NUnitAsp is the correspondent for ASP.NET application.&lt;br&gt;
&lt;/p&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=132318" width="1" height="1"&gt;</content><slash:comments>636</slash:comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/commentrss.aspx?PostID=132318</wfw:commentRss></entry><entry><title>SQL User Defined Function to Parse a Delimited String</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/archive/2005/08/12/131895.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:131895</id><created>2005-08-11T19:11:00Z</created><content type="text/html" mode="escaped">&lt;p class="MsoNormal"&gt;Below
function takes as parameter a text, split the text in tokens, and returns a
table containing all this tokens.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;u1:p&gt;&lt;/u1:p&gt;&lt;u2:p&gt;&lt;/u2:p&gt;
&lt;pre&gt;&lt;i&gt;&lt;span&gt;CREATE FUNCTION ParseText2File(@p_text varchar(4000), @p_Delimeter&amp;nbsp;char(1))&lt;br&gt;RETURNS @results TABLE (id varchar(100))&lt;br&gt;AS&lt;br&gt;&lt;br&gt;&lt;u2:p&gt;&lt;/u2:p&gt;BEGIN&lt;br&gt;&lt;br&gt;&lt;u1:p&gt;&lt;/u1:p&gt;declare @i1 varchar(200)&lt;br&gt;declare @i2 varchar(200)&lt;br&gt;declare @tempResults Table (id varchar(100))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;u2:p&gt;&lt;/u2:p&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;while
len(@p_text) &amp;gt; 0 and charindex(@p_delimiter, @p_text) &amp;lt;&amp;gt; 0&lt;br&gt;
begin&lt;br&gt;
select @i1 = left(@p_text, charindex(@p_delimiter, @p_text) - 1)&lt;br&gt;
insert @tempResults select @i1&lt;br&gt;
select @p_text = right(@p_text, len(@p_text) - charindex(@p_delimiter,@p_text))&lt;br&gt;
end&lt;br&gt;
insert @tempResults select @p_text&lt;br&gt;
&lt;br&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;insert @results&lt;br&gt;
select result&lt;br&gt;
from @tempResults&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;


&lt;u1:p&gt;&lt;/u1:p&gt;&lt;u2:p&gt;&lt;/u2:p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;return&lt;br&gt;
&lt;u1:p&gt;&lt;/u1:p&gt;END&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;


&lt;u1:p&gt;&lt;/u1:p&gt;&lt;u2:p&gt;&lt;/u2:p&gt;

&lt;p&gt;Let’s see a practical case when this function can be used. You have a list
of products. Each product belongs to a specific category. You need to return
all products belonging to a list of categories. &lt;u2:p&gt;&lt;/u2:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p&gt;An approach could be to create a stored procedure GetProducts(@categories
varchar(4000)) which has a parameter containing all categories ids separated by
comma like this: '1,3,6,11'. &lt;span class="vb-function"&gt;Using the above function,
the solution of our problem is simple:&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/span&gt;&lt;u2:p&gt;&lt;/u2:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p&gt;&lt;i&gt;CREATE PROCEDURE
GetProducts(@categories varchar(4000))&lt;u2:p&gt;&lt;/u2:p&gt;&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p&gt;&lt;i&gt;As&lt;u2:p&gt;&lt;/u2:p&gt;&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p&gt;&lt;i&gt;SELECT p.productId, p.productName&lt;u2:p&gt;&lt;/u2:p&gt;&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p&gt;&lt;i&gt;FROM products p&lt;u2:p&gt;&lt;/u2:p&gt;&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p&gt;&lt;i&gt;WHERE p.categoryId IN (SELECT id
FROM dbo.ParseText2Table(@categories))&lt;u2:p&gt;&lt;/u2:p&gt;&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;span&gt;&lt;br&gt;
&lt;/span&gt;

&lt;pre&gt;A different approach can be found here: &lt;br&gt;&lt;a href="http://www.codeproject.com/database/SQL_UDF_to_Parse_a_String.asp"&gt;http://www.codeproject.com/database/SQL_UDF_to_Parse_a_String.asp&lt;/a&gt;&lt;u1:p&gt;&amp;nbsp;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;u2:p&gt;&amp;nbsp;&lt;/u2:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;
&lt;pre&gt;P.S. Of course, you can take in consideration sp_executesql function.&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=131895" width="1" height="1"&gt;</content><slash:comments>1082</slash:comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/commentrss.aspx?PostID=131895</wfw:commentRss></entry><entry><title>Database backup programatically (using .NET)</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/archive/2005/08/12/131894.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:131894</id><created>2005-08-11T19:05:00Z</created><content type="text/html" mode="escaped">&lt;p class="MsoNormal"&gt;&lt;span&gt;Today my boss asked me to add
a new feature to the application I work on: to make a database backup every time
the application is closed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;I was very surprised to do
this in less then 1 hour using SQLDMO library which is shipped with SQL Server
2000.&amp;nbsp; The dll itself is a COM object and you must reference it from your
.net project as such.&amp;nbsp; The IDE will create the necessary COM wrappers
needed to use the library.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;




&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;




&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; using&lt;/span&gt;&lt;span&gt;
SQLDMO;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;












&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;//Necessary
declarations&lt;/span&gt;&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SQLServer2Class server = &lt;span&gt;new&lt;/span&gt; SQLServer2Class();&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Database2 database;&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Backup2Class backup = &lt;span&gt;new&lt;/span&gt;
Backup2Class();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;












&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//Connect to server&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;server.LoginSecure = &lt;span&gt;true&lt;/span&gt;;&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;server.Connect(“server”, “user”, “pass”);&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;








&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//Select database you want to backup&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;database = (Database2) databases.Item(“database_name”,
&lt;span&gt;null&lt;/span&gt;);&lt;span&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;backup.Database
= database.Name;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;








&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Specify
the place where backup to be saved.&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;backup.Files = “C:\mydb.bak”;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;








&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//Effective backup of the database&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;backup.SQLBackup(server);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;








&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//Disconnect, don’t forget it&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;server.DisConnect();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
As you can see, this is a
much easier alternative when SQL information or control is needed.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=131894" width="1" height="1"&gt;</content><slash:comments>593</slash:comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/commentrss.aspx?PostID=131894</wfw:commentRss></entry><entry><title>Get list of SQL Server databases</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/archive/2005/07/27/131510.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:131510</id><created>2005-07-26T19:46:00Z</created><content type="text/html" mode="escaped">&lt;o:p&gt;&lt;/o:p&gt;In
this post I’ll present you 2 ways to get existing databases on a SQL Server.



&lt;p class="MsoNormal"&gt;First
solution is to use sp_databases system procedure. Calling this procedure is
made like calling any other stored procedure. Please find below the code
snippet.&lt;/p&gt;





































&lt;p class="MsoNormal"&gt;&lt;span&gt;//Create and
open the connection&lt;/span&gt;&lt;br&gt;
&lt;span&gt;SqlConnection cn = &lt;span&gt;new&lt;/span&gt; SqlConnection(CONNECTION_STRING);&lt;br&gt;
cn.Open();&lt;o:p&gt; &lt;br&gt;
&lt;br&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;//Create and
execute the command&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br&gt;
&lt;span&gt;SqlCommand cmd = &lt;span&gt;new&lt;/span&gt; SqlCommand();&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
cmd.Connection = cn;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
cmd.CommandType =
CommandType.StoredProcedure;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
cmd.CommandText =
"sp_databases";&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
SqlDataReader myReader =
cmd.ExecuteReader();&lt;o:p&gt; &lt;br&gt;
&lt;br&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;span&gt;//Shows all
databases&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br&gt;
&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(reader.Read())&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span&gt;{&lt;/span&gt;&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(reader.GetString(0));&lt;/span&gt;&lt;br&gt;
&lt;span&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;br&gt;
The
second solution is to use SQL-DMO library. As you may have been maybe expecting,
the code is much simpler. You just need to connection to SQL Server, and use
SQLServerClass.Databases property. Be aware to add reference to SQLDMO.dll. It
might be found at the following path:&lt;/span&gt;&lt;span&gt;&lt;br&gt;
&lt;/span&gt;&lt;span&gt;C:\Program Files\Microsoft
SQL Server\80\Tools\Binn\SQLDMO.dll&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;















&lt;p class="MsoNormal"&gt;&lt;span&gt;SQLDMO.SQLServer server = &lt;span&gt;new&lt;/span&gt; SQLDMO.SQLServerClass();&lt;br&gt;
server.Connect(".","sa","sa");&lt;/span&gt;&lt;br&gt;
&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(SQLDMO.Database db &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; server.Databases)&lt;/span&gt;&lt;br&gt;
&lt;span&gt;{&lt;/span&gt;&lt;br&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(db.Name);&lt;/span&gt;&lt;br&gt;
&lt;span&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;





&lt;span&gt;&lt;/span&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=131510" width="1" height="1"&gt;</content><slash:comments>753</slash:comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/commentrss.aspx?PostID=131510</wfw:commentRss></entry><entry><title>Index Tunning Wizard</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/archive/2005/07/27/131509.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:131509</id><created>2005-07-26T19:42:00Z</created><content type="text/html" mode="escaped">&lt;p&gt;&lt;span&gt;The Query Analyzer &lt;span&gt;can be used to recommend indexes&lt;/span&gt; for
specific tables. By entering a query into the Query Analyzer, and running the
"Index Tuning Wizard" option, the query will be reviewed, and if
appropriate, one or more indexes will be recommended by the Index Wizard. If an
index is recommended, Query Analyzer can automatically create the index for
you, if you like. This tool will not point out indexes that are not used, nor will
it affect any existing indexes.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;



&lt;span&gt;One way I take advantage
of this tool when tuning a query is to run this option as a first step, before
I really begin any analysis and work on the query. This way, if there are any
obvious indexes needed, they will be found quickly, saving me a little time.
Once this step is out of the way, then I run an execution plan of the query,
and then look for other ways to tune the query.&lt;/span&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=131509" width="1" height="1"&gt;</content><slash:comments>3214</slash:comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/commentrss.aspx?PostID=131509</wfw:commentRss></entry><entry><title>Executing TRUCATE TABLE on a remote server</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/archive/2005/07/20/131379.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:131379</id><created>2005-07-19T18:33:00Z</created><content type="text/html" mode="escaped">&lt;p class="q"&gt;Did you tried to execute TRUNCATE statement against a table on a
remote server? TRUNCATE TABLE server01.database01.dbo.Tablename01&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;



&lt;p class="q"&gt;Executing the above statement, you’ll get the error message:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;



&lt;p&gt;&lt;i&gt;Server: Msg 117, Level 15, State 1, Line 2&lt;/i&gt;&lt;br&gt;
&lt;i&gt;The object name 'server01.database01.dbo.' contains more&lt;/i&gt;&lt;br&gt;
&lt;i&gt;than the maximum number of prefixes. The maximum is 2.&lt;/i&gt;&lt;/p&gt;



&lt;p&gt;TRUNCATE TABLE isn't a command that you can run directly by using the
four-part name associated with a linked server. However, you can issue the
TRUNCATE TABLE command against the linked server by using the sp_executesql
stored procedure. Sp_executesql is designed primarily to help you parameterize
a SQL query so that  SQL Server can reuse the plan more easily. However,
sp_executesql is also valuable when you're running commands against linked
servers.&lt;/p&gt;



&lt;pre&gt;&lt;i&gt;EXECUTE&lt;span&gt;  &lt;/span&gt;sql3.master.dbo.sp_executesql &lt;br&gt;	 &lt;span&gt;&lt;/span&gt;N'TRUNCATE table tempdb..NewAuthors'&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/pre&gt;



&lt;p&gt;The above statement hows an example of how to use sp_executesql to execute
SQL commands on a remote server even if the native commands don't directly
support linked servers. Although this example demonstrates the execution of
TRUNCATE TABLE, you can use this stored procedure to execute almost any type of
SQL command.&lt;/p&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=131379" width="1" height="1"&gt;</content><slash:comments>1819</slash:comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/commentrss.aspx?PostID=131379</wfw:commentRss></entry><entry><title>Comparing files</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/archive/2005/07/14/131268.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:131268</id><created>2005-07-13T19:53:00Z</created><content type="text/html" mode="escaped">&lt;span id="PostFlatView"&gt;											
															One way to compare files is to use hashing. A hash value (also called a
message digest) is a number generated from a text. The hash is
substantially smaller than the text itself, and is generated by a
formula in such a way that it is extremely unlikely that some other
text will produce the same hash value.&lt;br&gt;
&lt;br&gt;
Please have a look to the following code snippet to see implementation of files comparing with hash mechanism.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
using System.IO;&lt;br&gt;
using System.Security.Cryptography; &lt;br&gt;
...&lt;br&gt;
private bool AreFilesIdentical(string source, string target)&lt;br&gt;
{&lt;br&gt;
            //create the hashing object.&lt;br&gt;
            HashAlgorithm alg = HashAlgorithm.Create();&lt;br&gt;
&lt;br&gt;
            //Calculate the hash for the first file&lt;br&gt;
            FileStream fsA = new FileStream(source, FileMode.Open);&lt;br&gt;
            byte[] hashA = alg.ComputeHash(fsA);&lt;br&gt;
            fsA.Close();&lt;br&gt;
 &lt;br&gt;
            //calculate the hash for the second file&lt;br&gt;
            FileStream fsB = new FileStream(target, FileMode.Open);&lt;br&gt;
            byte[] hashB = alg.ComputeHash(fsB);&lt;br&gt;
            fsB.Close();&lt;br&gt;
 &lt;br&gt;
            //compare the hashes&lt;br&gt;
           
return BitConverter.ToString(hashA) == BitConverter.ToString(hashB);&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
Another solution would be to use file metadata information. But you
can’t count on it every time. E.g. if you based on file time
modification stamp, you might have surprises in case of file originate
on system with different time zones.&lt;br&gt;
&lt;br&gt;
I’m waiting your suggestions.&lt;/span&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=131268" width="1" height="1"&gt;</content><slash:comments>893</slash:comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/commentrss.aspx?PostID=131268</wfw:commentRss></entry><entry><title>Refactoring</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/mihaibejenariu/archive/2005/07/14/131266.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:131266</id><created>2005-07-13T19:35:00Z</created><content type="text/html" mode="escaped">&lt;span id="PostFlatView"&gt;											
															Refactoring is a disciplined technique for restructuring an existing
body of code, altering its internal structure without changing its
external behavior. Its heart is a series of small behavior preserving
transformations. Each transformation (called a 'refactoring') does
little, but a sequence of transformations can produce a significant
restructuring. Since each refactoring is small, it's less likely to go
wrong. The system is also kept fully working after each small
refactoring, reducing the chances that a system can get seriously
broken during the restructuring.&lt;br&gt;
&lt;br&gt;
Here it is a list of possible refactorings in Alphabetical Order. Read
this carefully and don’t hesitate to refactor your code when you have
the opportunity. &lt;a href="http://www.refactoring.com/catalog/"&gt;http://www.refactoring.com/catalog/&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
ReSharper is a refactoring plugin for Visual Studio to support C#
development. It's developed by the same people who built IntelliJ Idea
for Java and brings much of its development style to C#. &lt;a href="http://www.jetbrains.com/resharper/"&gt;http://www.jetbrains.com/resharper/&lt;/a&gt;
&lt;/span&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=131266" width="1" height="1"&gt;</content><slash:comments>754</slash:comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/mihaibejenariu/commentrss.aspx?PostID=131266</wfw:commentRss></entry></feed>