C#中非常基本的数据库概念

时间:2009-08-24 01:20:06

标签: c# database console

我正在用C#编写一个控制台程序,我需要使用一个数据库

我正在寻找有关从C#控制台程序连接和使用数据库的非常基本的教程。我还没有找到足够基本的东西,我希望这里的人能帮我找到我需要的信息。我已经阅读了MSDN上的资料,但MSDN假定我仍在寻找有关这些事情的基本知识。

我在项目中的VS Express中创建了一个数据库,创建了表,并在表中写了一些启动记录。我试图找出这些东西究竟是什么,以及如何确定如何在我的项目中应用它们:

的SQLConnection

SQLConnection类

的SqlCommand

的SqlDataAdapter

数据集

感谢。

7 个答案:

答案 0 :(得分:8)

类似的东西:

using System.Data;
using System.Data.SqlClient;

using(SqlConnection connection = new SqlConnection("")){
    SqlCommand command = new SqlCommand(@"
insert into
    tblFoo (
        col1,
        col2
    ) values (
        @val1,
        @val2
    )",
    connection
    );

    SqlParameter param = new SqlParameter("@val1", SqlDbType.NVarChar);
    param.Value = "hello";

    command.Parameters.Add(param);

    param = new SqlParameter("@val2", SqlDbType.NVarChar);
    param.Value = "there";

    command.Parameters.Add(param);

    command.ExecuteNonQuery();
    connection.Close();
}

- 编辑:

当然,当你开始做严肃的事情时,我推荐一个ORM。我使用LLBLGen(它花钱,但绝对值得)。

- 编辑:

<强>的SqlConnection

与数据库通信的内容。这将保留名称 服务器,用户名,密码和其他错误的东西。

<强>的SqlCommand

包含要发送到服务器的sql语句的东西。这可能是“更新”或“插入”或“选择”或任何内容。根据它的不同,您可以使用不同的方法来执行它,以便可以获取数据。

<强>的SqlDataAdapter

一个奇怪的人;它专门用于填充'DataSet'。它基本上为您做了一些工作,将它找到的信息添加到集合中。

<强>数据集

不确定你想要多么简单。它只是一个表格式格式的返回数据集合,您可以迭代。它包含DataTables,因为某些查询可以返回多个表。但通常情况下,您只有一个表,您可以绑定它,或者其他任何表。

答案 1 :(得分:2)

创建一个sqlconnection,打开它,创建一个sqlcommand,执行它来获取一个sqldatareader,瞧。对于一个简单的例子,您不需要数据适配器。

string connectionString = "...";
using (SqlConnection conn = new SqlConnection(connectionString))
{
  conn.Open();
  string sql = "select field from mytable";
  SqlCommand cmd = new SqlCommand(sql, conn);
  SqlDataReader rdr = cmd.ExecuteReader();
  while (rdr.Read())
  {
    Console.WriteLine(rdr[0]);
  }
}

答案 2 :(得分:2)

有一个关于ADO.NET的教程,涵盖了你在http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson01.aspx寻找的很多东西。第1课主要是背景知识,但第2课及以后的课程是SQL客户端对象。

http://www.codeproject.com/KB/database/sql_in_csharp.aspx的另一个教程涵盖了一些基础知识(SqlConnection,SqlCommand)。

答案 3 :(得分:1)

我买了一本名为Pragmatic ADO.NET的书。

答案 4 :(得分:1)

嗯,有两种方法可以在C#中与SQL Server数据库进行交互。第一个是LINQ,第二个是SqlClient库。

LINQ

自.NET 3.0以来,我们已经可以访问LINQ,这是一个非常令人印象深刻的ORM以及处理集合和列表的方式。 LINQ可以通过两种不同的方式与数据库配合使用。他们是:

Scott Gu在LINQ to SQL上有一个非常好的教程。我建议LINQ to SQL刚入门,你可以在LINQ to Entities中使用很多这样的东西。

获取纽约所有客户的样本select将是:

var Custs = from c in Customers
            where c.State = 'NY'
            select c;
foreach(var Cust in Custs)
{
    Console.WriteLine(Cust.Name);
}

的SqlClient

命中SQL Server数据库(pre -.NET 3.0)的传统C#方法是通过SqlClient library。实质上,您创建一个SqlConnection来打开与数据库的连接。如果您需要有关连接字符串的帮助,请查看ConnectionStrings.com

连接到数据库后,您将使用SqlCommand对象与其进行交互。此对象最重要的属性是CommandText。这接受SQL作为其语言,并将对数据库运行原始SQL语句。

如果您正在进行插入/更新/删除,则将使用SqlCommand using System.Data; using System.Data.SqlClient; //... SqlConnection dbConn = new SqlConnection("Data Source=localhost;Initial Catalog=MyDB;Integrated Security=SSPI"); SqlCommand dbComm = new SqlCommand(); SqlDataReader dbRead; dbConn.Open(); dbComm.Connection = dbConn; dbComm.CommandText = "select name from customers where state = @state"; dbComm.Parameters.Add("@state", System.Data.SqlDbType.VarChar); dbComm.Parameters["@state"].Value = "NY"; dbRead = dbComm.ExecuteReader(); if(dbRead.HasRows) { while(dbRead.Read()) { Console.WriteLine(dbRead[0].ToString()); } } dbRead.Close(); dbConn.Close(); 方法。但是,如果您正在进行选择,则会使用ExecuteNonQuery并返回ExecuteReader。然后,您可以遍历SqlDataReader以获得结果。

以下是再次抓住纽约所有客户的代码:

{{1}}

希望这能为您介绍每种方法的作用以及如何学习更多内容。

答案 5 :(得分:0)

通常,我建议使用Microsoft Enterprise Library进行数据库访问。我在一些项目中使用它,我非常喜欢它。

请参阅Microsoft提供的Data Access Quickstart,以帮助您入门

此外,我也习惯于编写Extension Methods来从DataRows中提取数据。例如,我可以这样做:

    //Create an extension method, Value, 
    //to extract a certain type from a DataRow, 
    //supplying a default value to be used if DbNull.Value is encountered
    DateTime someDateValue = dr["SomeDatabaseField"].Value(new DateTime());

希望这有帮助!

答案 6 :(得分:0)

请参阅ADO.NET Sample Application

示例封面

<强>的SqlClient

using System;
using System.Data;
using System.Data.SqlClient;

class Sample
{
  public static void Main() 
  {
    SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");

    SqlCommand catCMD = nwindConn.CreateCommand();
    catCMD.CommandText = "SELECT CategoryID, CategoryName FROM Categories";

    nwindConn.Open();

    SqlDataReader myReader = catCMD.ExecuteReader();

    while (myReader.Read())
    {
      Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
    }

    myReader.Close();
    nwindConn.Close();
  }
}

<强>的OleDb

using System;
using System.Data;
using System.Data.OleDb;

class Sample
{
  public static void Main() 
  {
    OleDbConnection nwindConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");

    OleDbCommand catCMD = nwindConn.CreateCommand();
    catCMD.CommandText = "SELECT CategoryID, CategoryName FROM Categories";

    nwindConn.Open();

    OleDbDataReader myReader = catCMD.ExecuteReader();

    while (myReader.Read())
    {
      Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
    }

    myReader.Close();
    nwindConn.Close();
  }
}

<强> ODBC

using System;
using System.Data;
using System.Data.Odbc;

class Sample
{
  public static void Main() 
  {
    OdbcConnection nwindConn = new OdbcConnection("Driver={SQL Server};Server=localhost;" +
                                                  "Trusted_Connection=yes;Database=northwind");

    OdbcCommand catCMD = new OdbcCommand("SELECT CategoryID, CategoryName FROM Categories", nwindConn);

    nwindConn.Open();

    OdbcDataReader myReader = catCMD.ExecuteReader();

    while (myReader.Read())
    {
      Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
    }

    myReader.Close();
    nwindConn.Close();
  }
}