Overview of ADO.NET Whidbey
Download
Report
Transcript Overview of ADO.NET Whidbey
Scalable Development, Inc.
Building systems today that perform tomorrow.
Intro to Sql Server
Yukon for Developers
Wallace
B. McClure
Scalable
Development, Inc.
.NET Resources
– www.asp.net
AspAdvice – www.aspadvice.com
Windows Forms – www.windowsforms.net
Architecture – msdn.microsoft.com/architecture
.NET News – www.dotnetwire.com
ASP.NET
Agenda
Introduction
to Yukon for developers.
CLR
Integration.
New .NET Features.
TSQL.
Other features.
Caution:
Yukon
code is beta 1.
.NET Framework is Alpha quality.
Limited Documentation.
What is Yukon?
Next
version of the MS Sql Server
database.
Integration of the .NET Framework into
the engine.
Beta 2 expected sometime in the early
summer.
Shipment?
Sql Workbench (SWB)
No more Enterprise Manager.
No more Sql Server Manager (for the moment).
VS.NET inspired management tool.
Lots of pieces are disabled at this time.
Let’s take a look at it…………………
Developer Oriented Featureset
CLR in the database.
Stored
Procedures.
Triggers.
Functions.
Scrollable Server Side Cursors.
TSQL Enhancements.
Full-Text Search.
XML.
CLR in the Database
Yukon database engine hosts the CLR.
Mechanism to put procedural logic into the
database.
.NET Whidbey framework will be integrated
into the engine.
Calls to CLR and TSQL objects will be the
same.
Similar, but safer than extended stored
procedures.
When to use what?
CLR
Object:
Complicated
procedural logic.
Computationally intensive logic.
TSQL
Set
Object:
oriented operations.
Data oriented operations
New .NET Objects
System.Data.SqlServer.
SqlContext.
GetTriggerContext.
Insert.
Update.
Delete.
– access to the current command.
GetConnection – access to the current connection.
GetCommand
SqlProcedure attribute.
CLR Stored Procedure Code
[SqlProcedure] public static void sp_Add_URL_DOTNET(string pstrUrl)
{
SqlCommand sqlCm = SqlContext.GetCommand();
string strSql;
string strDomainName = CalculateDomainName(pstrUrl);
string strSearchCode = CalculateSearchCode(pstrUrl);
try
{
strSql = "select count(*) from tblSearchUrl where UrlAddress='" +
SqlEscape(pstrUrl) + "' and DomainName='" + strDomainName + "' and "
+ "SearchCode=" + strSearchCode;
sqlCm.CommandText = strSql;
if ( Convert.ToInt32(sqlCm.ExecuteScalar()) == 0 ) {
CLR Stored Procedure Code (con’t.)
strSql = "insert into tblSearchUrl (UrlAddress, UrlStatus, DomainName,
SearchCode )
values (" +
"'" + pstrUrl + "', 'NEW_URL', '" +
SqlEscape(strDomainName) + "', " + strSearchCode + ")";
sqlCm.CommandText = strSql;
sqlCm.ExecuteNonQuery();
}
}
catch (System.Exception sysExc)
{
EventLog.WriteEntry("dbWebSearch", "Error Message: " +
sysExc.Message, EventLogEntryType.Information);
}
finally
{
sqlCm.Dispose();
}
}
CLR Trigger Code
Option Explicit On
Option Strict On
Imports System.Data.SqlServer
Public Class cTimeSheetSql
Public Shared Sub trTimeSheetProjectEntryUpdate()
Dim sqlTrgCxt As SqlTriggerContext = SqlContext.GetTriggerContext
Dim sqlCm As SqlCommand = SqlContext.GetCommand
Dim strSql As String = "update tblProjectEntry set DateUpdated='" &
DateTime.Now.ToString() &
"' where tblProjectEntryId in (select tblProjectEntryId from inserted)"
'Dim strSql As String = "select count(*) from inserted"
Try
If (sqlTrgCxt.TriggerAction = Sql.TriggerAction.Update) Then
sqlCm.CommandText = strSql
sqlCm.CommandType = CommandType.Text
sqlCm.ExecuteNonQuery()
End If
Finally
sqlCm = Nothing
End Try
End Sub
Trigger Installation
CREATE ASSEMBLY as TimeSheetObjects FROM
'C:\Documents and Settings\Wallym\My Documents\Visual Studio
Projects\Local - TimeSheet Project\Local - TimeSheet
Project\bin\timeSheetObjectsNS.dll'
WITH permission_set = safe
CREATE TRIGGER [dbo].[tr_tblProjectEntry_Update] ON
[dbo].[tblProjectEntry]
AFTER UPDATE AS EXTERNAL name
TimeSheetObjectsNS:[TimeSheetObjectsNS.cTimeSheetSql]::trTimeSheetP
rojectEntryUpdate
Scrollable Server Side Cursors
SqlConnection sqlCn = new SqlConnection(strCn);
SqlCommand sqlCm = new SqlCommand();
SqlResultSet sqlRs;
sqlCm.Connection = sqlCn;
sqlCn.Open();
sqlCm.CommandText = strSql;
sqlCm.CommandType = CommandType.Text;
sqlRs = sqlCm.ExecuteResultSet(ResultSetOptions.Updatable);
if ( sqlRs.HasRows == true )
{
while(sqlRs.Read())
{
//do something.......
sqlRs.Update();
}
}
sqlRs.Close();
T-Sql Enhancements
PIVOT/UNPIVOT.
TRY/CATCH.
Recursive
Queries. Analogous to
Oracle’s CONNECT BY PRIOR.
Wait.
Others.
Full-Text Search Enhancements
Seems to be faster than Sql2k FT.
More scalable than Sql2k FT.
Can search through multiple columns at one
time using Contains and FreeText commands.
Tons of other enhancements:
New language constructs for
Security.
Replication.
Notification
Services.
Triggers.
XML Query.
XML DataType.
Service Broker.
User Defined Types.
Reporting Services.
Scalable Development, Inc.
Building systems today that perform tomorrow.
Questions?
865-693-3004.
[email protected]
Don’t
ask about shipment dates
because I know nothing about them.
END