Demonstra Passo a passo: Depuração de um tipo definido pelo usuário do CLR de SQL
Este tópico se aplica a:
Edition |
Visual Basic |
C# |
C++ |
Desenvolvedores Web |
---|---|---|---|---|
Express |
![]() |
![]() |
![]() |
![]() |
Standard |
![]() |
![]() |
![]() |
![]() |
Pro e equipe |
![]() |
![]() |
![]() |
![]() |
Este exemplo mostra como depurar um SQL Server Common Language Runtime (CLR SQL) definidos pelo usuário tipo. Ele cria um novo tipo de SQL de CLR no banco de dados de exemplo AdventureWorks. O tipo é usado em uma definição de tabela, um INSERT instrução e um SELECT instrução.
Se, quando você tentar depurar um objeto CLR em SQL, a mensagem "Cancelada pelo usuário" aparece, você deve configurar manualmente o computador no qual você está executando Visual Studio , bem como o computador que está executando o SQL Server. Para obter mais informações, consulte Como: Configurar seus computadores para habilitar o Transact-SQL e depuração de CLR de SQL.
![]() |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. Para obter mais informações, consulte Trabalhando com configurações. |
Para depurar um tipo definido pelo usuário do CLR SQL
Em um novo projeto de SQL de CLR, estabelecer uma conexão ao banco de dados de exemplo AdventureWorks. Para obter mais informações, consulte How to: Connect to a Database.
Criar um novo tipo usando o código da primeira seção do exemplo abaixo e o nome Point.cs. Para obter mais informações, consulte How to: Develop with the SQL Server Project Type.
Adicione um script que testa o tipo. No Solution Explorer clique com o botão direito do mouse no diretório TestScripts, clique Add Test Script, e insira o código da segunda seção do exemplo abaixo. Salve o arquivo com o nome Point.sql. Clique com o botão direito no nome do arquivo e, em seguida, clique em Set as Default Debug Script.
Adicione pontos de interrupção.
No tipos pasta na Server Explorer, abra o ponto.
Coloque um ponto de interrupção dentro de cada método, portanto, você pode observar o fluxo de controle dentro do tipo.
Do Debug menu, escolha Iniciar para compilar, implantar e o projeto de teste de unidade. Quando o ponteiro de instrução, designado por uma seta amarela, aparecer no ponto de interrupção, você está depurando sua função.
Experimente recursos de depuração diferentes.
O Parse método é executado uma vez para cada INSERT a instrução no script em Point.sql. Clicando-se repetidamente Step Into na Debug menu, você pode observar como o método converte um par de número delimitado por dois-pontos em um Point objeto.
No Locals janela, abra a variável pt, que contém o atual Point sendo construída.
No Editor de texto, clique duas vezes o pt variável para selecionar um proprietário. Arrastar pt em qualquer local do Watch janela. ptAgora é adicionado à lista de variáveis observadas, e você pode observar como o Point é construído.
Siga as etapas a classe várias vezes e observe as diferenças entre o caminho um INSERT e um SELECT take.
Pressione Continue novamente para concluir a depuração da função.
Exemplo
Este é o código que define o tipo usado neste exemplo. Esse código cria uma tabela denominada Points, insere linhas e imprime o conteúdo da tabela. Observe que você não precisa incluir o comando lote GO entre a tabela de criar e acessar o proprietário. Na verdade Visual Studio 2005 interpretará o GO como um comando SQL inválido.
using System;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Runtime.Serialization;
[Serializable, SqlUserDefinedTypeAttribute(Format.Native)]
public struct Point: INullable
{
private bool m_isNull;
private double m_x;
private double m_y;
public bool IsNull {
get { return (m_isNull); }
}
public override string ToString()
{
if (this.IsNull) { return "NULL"; }
else { return this.m_x + ":" + this.m_y; }
}
public static Point Parse(SqlString s)
{
if (s.IsNull) { return Null; }
else
{
// Parse input string here to separate out points:
Point pt = new Point();
string str = Convert.ToString(s);
string[] xy = str.Split(':');
pt.X = Convert.ToDouble(xy[0]);
pt.Y = Convert.ToDouble(xy[1]);
return (pt);
}
}
public static Point Null
{
get
{
Point pt = new Point();
pt. m_isNull = true;
return (pt);
}
}
public double X
{
get { return (this.m_x); }
set { m_x = value; }
}
public double Y
{
get { return (this.m_y); }
set { m_y = value; }
}
}
Este é o script de teste que chama a função.
CREATE TABLE dbo.Points (
ID int IDENTITY(1,1) PRIMARY KEY,
Pnt Point)
INSERT INTO dbo.Points (Pnt) VALUES (CONVERT(Point, '3:4'))
INSERT INTO dbo.Points (Pnt) VALUES (CONVERT(Point, '-1:5'))
INSERT INTO dbo.Points (Pnt) VALUES (CAST ('1:99' AS Point))
SELECT ID,
Pnt.ToString() as StringPoint,
Pnt.X as X,
Pnt.Y as Y
FROM dbo.Points