terça-feira, 10 de julho de 2012

COMO USAR BANCO DE DADOS NO C# (TRADUÇÃO DO CODE PROJECT)

-->

Leia também
http://ronaldoeberle.blogspot.com.br/



Introdução

Neste artigo pretendo demonstrar como inserir e ler dados de um banco de dados SQL Server ou MSDE. Este código deve funcionar tanto no SQL Server, estou usando o 2000 e MSDE. Estou usando o Visual Studio 2002, mas isso deve funcionar com o Visual Studio 2003, Web Matrix, ea linha de comando SDK. Este código deve funcionar com ambos os # C aplicações e aplicações web de C # e WebServices. Esse código não compilar no FreeBSD com Rotor [^].

Background
Parte do meu projeto atual exigiu-me muito armazenar e recuperar informações de um banco de dados. Decidi usar C # como minha linguagem alvo desde que eu estou lendo atualmente Dentro C # Segunda Edição [^] por Tom Archer [^], que por sinal é necessário ter um livro. No entanto, eu não poderia encontrar exemplos que eram claras e apenas genérico acessando SQL Server com C #.


Usando o código


Eu não incluir um aplicativo de exemplo porque o código de fornecer, dentro do artigo pode realmente ser largadas e deve funcionar sem nenhum problema. Também durante todo o artigo, vou me referir ao SQL Server, MSDE é uma versão gratuita do SQL Server que não tem algumas das ferramentas GUI e tem alguns limites, tais como o tamanho do banco de dados. Este código irá trabalhar em ambos sem problemas.


Fazendo a conexão Boa


Não há mágica voodoo verdadeira para criar uma conexão com um servidor SQL supondo que ele está configurado corretamente, o que eu não sendo assunto desse artigo, na verdade. NET fez o trabalho com SQL bastante fácil. O primeiro passo é adicionar o namespace do cliente SQL:





SqlConnection myConnection = new SqlConnection("user id=username;" +
"password=password;server=serverurl;" +
"Trusted_Connection=yes;" +
"database=database; " +
"connection timeout=30");
Note: line break in connection string is for formatting purposes only

SqlConnection.ConnectionString

A seqüência de conexão é simplesmente uma compilação de opções e os valores para especificar como e que se conectar. Após investigar o Visual Studio. Arquivos de ajuda NET descobri que vários campos teve vários nomes que trabalharam na mesma, como o trabalho de senha e Pwd alternadamente. Eu não incluí todas as opções para SqlConnection.ConnectionString neste momento. Como eu tenho uma chance de testar e usar essas outras opções eu vou incluí-los no artigo.

Nota do trdutor:
“Se pode conseguir o strnig de conexão no Server Explorer propriedades.”

ID do usuário

A identificação de usuário é usado quando você estiver usando a autenticação SQL. Na minha experiência, isso é ignorado quando se utiliza um Trusted_Connection, ou autenticação do Windows. Se o nome de utilizador está associado com uma palavra-passe senha ou PWD será usado.
"user id=userid;"

Password or Pwd

O campo de senha é para ser usado com o ID de usuário, ele simplesmente não faria sentido entrar sem um nome de usuário, apenas uma senha. Tanto a senha e Pwd são completamente intercambiáveis.
"Password=validpassword;"-or-
"Pwd=validpassword;"

Data Source ou Servidos or endereço Address or Addr ou Network Address

Ao olhar na documentação do MSDN eu descobri que existem várias maneiras de especificar o endereço de rede. A documentação menciona nenhuma diferença entre eles e eles parecem ser intercambiáveis. O endereço é um endereço de rede válido, por brevidade só estou usando o endereço de localhost nos exemplos.


"Data Source=localhost;"
-or-
"Server=localhost;"
-or-
"Address=localhost;"-or-"Addr=localhost;"
-or-"Network Address=localhost;"

Integrated Sercurity or Trusted_Connection

Segurança integrada e Trusted_Connection são usados ​​para especificar o wheter connnection é seguro, como a autenticação do Windows ou SSPI. Os valores reconhecidos são true, false, e SSPI. De acordo com o MSDN documentação sspi é equivalente a verdadeira. Nota: Eu não sei como funciona SSPI, ou afeta a conexão.

Connect Timeout or Connection Timeout (Tempo de conexão)

Estes especificar o tempo, em segundos, para aguardar a resposta do servidor antes de gerar um erro. O valor padrão é 15 (segundos).
"Connect Timeout=10;"-or-
"Connection Timeout=10;"

Initial Catalog or Database (catalo inicila ou Base de dados)

Initial Catalog e banco de dados são simplesmente duas formas de selecionar o banco de dados associado com a conexão.


"Inital Catalog=main;"
-or-
"Database=main;"

Network Library or Net (Biblioteca de rede ou Net)

A opção de biblioteca de rede é essencial se você está se comunicando com o servidor em um protocl diferente do TCP / IP. O valor padrão para a biblioteca de rede é dbmssocn, ou TCP / IP. As seguintes opções estão disponíveis: dbnmpntw (Named Pipes), dbmsrpcn (Multiprotocol), dbmsadsn (Apple Talk), dbmsgnet (VIA), dbmsipcn (memória compartilhada), e dbmsspxn (IPX / SPX), e dbmssocn (TCP / IP). E, como antes de biblioteca de rede e Net pode ser usuário de forma alternada. Nota: O protocolo de rede correspondente deverá ser instalado no sistema ao qual você se conectar.

SqlConnection.Open()

Esta é a última parte de ficar conectado e é simplesmente executado pelo seguinte (lembre-se de verificar se a conexão tem uma seqüência de conexão primeiro):

try
{
myConnection.Open();
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
SQLConnection.open () é uma função void e não retorna um erro, mas lança uma exceção para se lembrar de colocá-lo em um try / catch cinta. em vez de ter o programa explodir na frente do utilizador.


Execução de um Commando

Comandos SQL são provavelmente a parte mais difícil de usar um banco de dados SQL, mas o quadro. NET amarrou tudo se bem e leva a maior parte do trabalho da suposição fora.

SqlCommand

Algum palpite sobre o que SqlCommand é utilizado? Se você adivinhou para os comandos SQL, então você está certo sobre. Um SqlCommand precisa de pelo menos duas coisas para funcionar. A cadeia de comando, e uma conexão. Primeiro vamos olhar para a necessidade de conexão. Existem duas maneiras para especificar a ligação, tanto são ilustrados abaixo:

SqlCommand myCommand = new SqlCommand("Command String", myConnection);

// - or -

myCommand.Connection = myConnection;

A sequência de conexão também pode ser especificado em ambos os sentidos usando a propriedade SqlCommand.CommandText. Agora vamos olhar para nossa SqlCommand primeiro. Para mantê-lo simples será um comando INSERT simples.


SqlCommand myCommand= new SqlCommand("INSERT INTO table (Column1, Column2) " +
"Values ('string', 1)", myConnection);

// - or -

myCommand.CommandText = "INSERT INTO table (Column1, Column2) " +
"Values ('string', 1)";
Agora vamos dar uma olhada nos valores. tabela é simplesmente a tabela dentro do banco de dados. Coluna1 e coluna2 são apenas os nomes das colunas. Dentro dos valores seção eu demonstrei como inserir um tipo string e um valor de tipo int. O valor da sequência é colocado entre aspas simples e como você pode ver um número inteiro é apenas passado como é. O passo final é para executar o comando com:

myCommand.ExecuteNonQuery();

SqlDataReader

Inserção de dados é importante, mas ler os dados é tão importante quanto. Foi quando o SqlDataReader vem para nos salvar. Não só você precisa de um leitor de dados, mas você precisa de um SqlCommand. O código a seguir demonstra como configurar e executar um simples leitor:


try
{
SqlDataReader myReader = null;
SqlCommand myCommand = new SqlCommand("select * from table",
myConnection);
myReader = myCommand.ExecuteReader();
while(myReader.Read())
{
Console.WriteLine(myReader["Column1"].ToString());
Console.WriteLine(myReader["Column2"].ToString());
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}

Como você pode ver o SqlDataReader não acessa o banco de dados, ele apenas mantém os dados e fornece uma interface fácil de usar os dados. O SqlCommand é bastante simples, a tabela é a tabela você está usando para ler. Coluna1 e Coluna2 são apenas as colunas como na tabela. Uma vez que há uma probabilidade muito alta o seu vai estar lendo mais de uma linha de um loop while é necessário para recuperar todos os registros. E como sempre você quiser experimentá-lo e pegá-lo, assim você não quebrá-lo.

SqlParameter

Há um pequeno problema com o uso de SqlCommand como já demonstrado, deixa uma brecha de segurança grande. Por exemplo, com a forma como demonstrado anteriormente sua cadeia de comando seria construído algo como se você fosse para obter a entrada de um usuário:

SqlCommand myCommand = new SqlCommand(
"SELECT * FROM table WHERE Column = " + input.Text, myConnection);
É tudo muito bem e dândi, se o usuário coloca na sintaxe correta, no entanto, o que acontece se o usuário coloca drop table valor1,. Melhor cenário que irá causar uma exceção (Eu não tenho verificado para ver o que este exemplo vai fazer, mas demonstra um ponto), o pior caso você pode dar adeus a sua tabela. Você poderia analisar todas as entradas do usuário e retirar tudo o que poderia causar problemas ou você poderia usar um SqlParameter. Agora a classe SqlParameter é muito grande, mas vou apenas mostrar-lhe um uso parâmetro fundamental. Basicamente, você precisa de três coisas para criar um parâmetro. Um nome, tipo de dados e tamanho. (nota para alguns tipos de dados que você vai querer deixar de fora o tamanho, como Texto).

SqlParameter myParam = new SqlParameter("@Param1", SqlDbType.VarChar, 11);
myParam.Value = "Garden Hose";
SqlParameter myParam2 = new SqlParameter("@Param2", SqlDbType.Int, 4);
myParam2.Value = 42;

SqlParameter myParam3 = new SqlParameter("@Param3", SqlDbType.Text);
myParam.Value = "Note that I am not specifying size. " +
"If I did that it would trunicate the text.";

É convenção de nomenclatura, pode ser necessário eu não tenho certeza, para citar todos os parâmetros que começam com o símbolo @. Agora, como você usar um parâmetro? Será que o seu muito fácil como mostra o código a seguir.

SqlCommand myCommand = new SqlCommand(
"SELECT * FROM table WHERE Column = @Param2", myConnection);
myCommand.Parameters.Add(myParam2);
Agora isso mantém um usuário não autorizado de alta-jacking sua cadeia de comando. Isso não é tudo que existe para os parâmetros se você quer aprender tópicos mais avançados um bom lugar para começar é aqui [^].

Não se esqueça de fechar-se quando Termina!
Fechando uma conexão é tão fácil como abri-lo. Apenas callSqlConnection.Close (), mas lembre-se de colocá-lo em try / catch, porque como SQLConnection.open () não retorna erros, mas lança uma exceção em seu lugar.

try
{
myConnection.Close();
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}

Quando boas ligações não são boas

A conexão confiável sempre foi um mistério para mim, eu nunca havia imaginado porque nunca IIS e SQL Server pareciam estar se entendendo. Felizmente Pete (moredip) apontou uma seção útil da documentação. Para torná-lo mais simples eu decidi adicioná-la a este artigo. Vou dividir isso em 2 seções diferentes. IIS 6, e outras versões do IIS. Para começar o seu vai querer fazer osql.exe certeza é no caminho do sistema, ou encontrá-lo. Ele deve estar localizado onde o seu servidor SQL Server 2000 / cliente diretório de ferramentas. No meu sistema é algo como isto:%% diretório de instalação \ 80 \ Tools \ Binn \ Para simplificar, vou usar pseudo-variáveis ​​nos exemplos de modo a não criar confusão.. Por exemplo, um pseudo-variável será parecido com este:% VARIÁVEL%. O servidor será referido como%% SERVER% INSTÂNCIA \%. Se você não estiver usando quaisquer nomes de instância, pode ser apenas%% SERVER, (local) se o servidor é a máquina local. Se você é nomes de instância seria algo como ServerName \ ServerInstance etc etc eu também estarei usando banco de dados%% para se referir ao nome do banco.

IIS 6 no Windows Server 2003

Eu sei que isso vai funcionar no IIS 6 com o Windows Server 2003, porque eu tenho feito isso e que é atualmente o único SO com IIS 6. No IIS 6 o processo ASP.NET é executado sob a conta 'NT AUTHORITY\NETWORK SERVICE'"
Agora nossa aplicação ASP.NET será capaz de se logar no servidor. Agora todos os thats esquerda é a concessão de acesso às bases de dados.


osql -E -S %SERVER%\%INSTANCE% -d %DATABASE% -Q
"sp_grantdbaccess 'NT AUTHORITY\NETWORK SERVICE'"
osql -E -S %SERVER%\%INSTANCE% -d %DATABASE% -Q
"sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'"
Estes 2 linhas irá adicionar o acesso a uma das bases de dados. Então, se você deseja adicionar o acesso a outro banco de dados basta alterar banco de dados%% e executar ambas as linhas.


IIS 5.1

Isso deve funcionar em todos os outros do IIS 5.1 (possivelmente outras versões) combinações. A única diferença entre o IIS 5.1 e IIS 6 é a conta do processo ASP.NET é executado. IIS 5.1 é executado em uma MACHINENAME%% \ ASPNET onde% MACHINENAME% é o nome da máquina.

osql -E -S %SERVER%\%INSTANCE% -Q "sp_grantlogin '%MACHINENAME%\ASPNET'"
Em ou uma aplicação ASP.NET quando é possível logar no servidor. Qaundo todos o acesson a todos as basese de dados.
osql -E -S %SERVER%\%INSTANCE% -d %DATABASE%
-Q "sp_grantdbaccess '%MACHINENAME%\ASPNET'"
osql -E -S %SERVER%\%INSTANCE% -d %DATABASE%
-Q "sp_addrolemember 'db_owner', '%MACHINENAME%\ASPNET'"

Estes 2 linhas irá adicionar o acesso a uma das bases de dados. Então, se você deseja adicionar o acesso a outro banco de dados basta alterar banco de dados%% e executar ambas as linhas.


Completando

Agora você tem os conceitos básicos necessários para começar a usar um banco de dados SQL em qualquer webapplications ou aplicações desktop.

Este artigo não é de forma acabados. Eu pretendo expandir o artigo e adicionar um aplicativo de exemplo se o tempo permitir. Com informações sobre procedimentos armazenados, bem como uma conexão expandida seção de opções. Se você tiver alguma sugestão favor deixá-los no fórum abaixo


History

  • 20 August 2004: Added a section on SqlParameters
  • 25 February 2004: Added information on setting up permissions with IIS
  • 2 July 2003: Revised connection string section
  • 28 June 2003: Fixed a few typographical errors
  • 27 June 2003: Initial Release

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author


United States

Member



Sign Up to vote
  Poor

Excellent

Add a reason or comment to your vote: x
Votes of 3 or less require a comment
Parte inferior do formulário

Comments and Discussions


You must Sign In to use this message board. (secure sign-in)

Parte superior do formulário
Search this forum  
Parte inferior do formulário

Parte superior do formulário
Profile popups    Noise   Layout   Per page    
Parte inferior do formulário


First PrevNext

abt post
gajendra konnur 22:10 5 Jun '12

nice
Sign In·View Thread·Permalink




Excellent Information
kshoufer1 20:09 11 Mar '12

Great job explaining accessing SQL Server through C#. I tried the example and it worked fine for me.
Sign In·View Thread·Permalink




My vote of 5
aamir abro 7:07 27 Jan '12

great for beginners for finding out some basics ...
Sign In·View Thread·Permalink




My vote of 5
delibey 12:28 2 Jan '12

was verry helpfull thx alot
Sign In·View Thread·Permalink




Web page not reading properly
jscheponik 3:36 21 Dec '11

Hopefully you can help with this. When I run it from Visual Studio it works correctly, but when I publish it to the web page, it no longer fills in the blanks. Any assistance on this would be greatly appreciated. Here is the code:

SqlConnection myConnection = new SqlConnection("user id=username;" + "password=password;" + "Data Source=servername\\prd_con1;" + "Initial Catalog=VmwCtxPerfMon;" + "Integrated Security=SSPI;" + "connection timeout=30");

private void GetArchiveDates()
{
ddlArchives.Items.Add("");
ddlTrendEnd.Items.Add("");
ddlTrendStart.Items.Add("");
//int counter = 0;
//string line;

try
{

myConnection.Open();

SqlDataReader myReader = null;
SqlCommand myCommand = new SqlCommand("select distinct Date from VMCPUAvail",
myConnection);
myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
ddlArchives.Items.Add(myReader["Date"].ToString());
ddlTrendStart.Items.Add(myReader["Date"].ToString());
ddlTrendEnd.Items.Add(myReader["Date"].ToString());
}

myConnection.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
Sign In·View Thread·Permalink




Good Learnings
rasheq 18:50 13 May '11

Thanks buddy.
It's a good sharing to beginners to learn.
Sign In·View Thread·Permalink




good one! what about SQLConnectionStringBuilder?
tipsybroom 22:17 28 Feb '11

With SQLConnectionStringBuilder u can easy build ConnectionStrings for your needs.
 
=)
Sign In·View Thread·Permalink
5.00/5 (1 vote)



Re: good one! what about SQLConnectionStringBuilder?
janitortck 4:37 7 Mar '11

Can you please explain that in briefly....
Sign In·View Thread·Permalink




Re: good one! what about SQLConnectionStringBuilder?
ricoohh 3:56 12 May '11

look for yourself
 
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.aspx


you will get something like this and dont want to mess with the string syntax


SqlConnectionStringBuilder conBuilder = new SqlConnectionStringBuilder();
conBuilder.DataSource = "srv-sqldb";
conBuilder.InitialCatalog = "Northwind";
conBuilder.UserID = "user";
conBuilder.Password = "26gf28";

SqlConnection con = new SqlConnection(conBuilder.ConnectionString);
aso.
Problems with Windows? re-boot.
Problems with Linux? be-root!

Sign In·View Thread·Permalink




Wait for con open
Ajay Kale New 21:58 13 Feb '11

Hi All,

Quero mostrar alguns em curso, mesmo em no médio prazo, quando a conexão está sendo aberto.
Quando eu tentei mostrar o rótulo ou tentou modificar o texto do botão, isso não acontece até
o conn é aberto. Depois conn abre - então apenas o texto é alterado como 'Conectando ...' ,
que eu quero mostrar nesse meio tempo quando a conexão está ficando aberta.

Qualquer ajuda ..?

Obrigado e cumprimentos
- Ajay K


Sign In·View Thread·Permalink
1.00/5 (1 vote)




Last Visit: 18:00 31 Dec '99     Last Update: 22:25 11 Jun '12

General    News    Suggestion    Question    Bug    Answer    Joke    Rant    Admin   
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.
Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120604.1 | Last Updated 23 Aug 2004
Article Copyright 2003 by Matt Newman
Everything else Copyright ©
CodeProject, 1999-2012 Terms of Use
Layout: fixed | fluid


The Code Project Insider. Free each morning.
Related Articles

Nenhum comentário:

Postar um comentário