Очень основные понятия базы данных в C # - PullRequest
6 голосов
/ 24 августа 2009

Я пишу консольную программу на C #, и мне нужно использовать базу данных.

Я ищу очень основные учебники по подключению и использованию базы данных из консольной программы C #. Я пока не смог найти ничего достаточно базового и надеюсь, что люди здесь помогут мне найти нужную мне информацию. Я прочитал материал на MSDN, но MSDN предполагает базовые знания об этих вещах, которые я все еще ищу.

Я создал базу данных в VS Express в своем проекте, создал таблицы и записал некоторые начальные записи в таблицы. Я пытаюсь выяснить, что конкретно представляет собой каждая из этих вещей, и как определить, как применить их в моем проекте:

SQLConnection

SQLConnection class

SQLCommand

SqlDataAdapter

DataSets

Спасибо.

Ответы [ 7 ]

8 голосов
/ 24 августа 2009

Что-то вроде:

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. По сути, он делает небольшую работу за вас, добавляя найденную информацию в набор.

DataSet

Не уверен, насколько просто ты этого хочешь. Это просто набор возвращаемых данных в табличном формате, который вы можете перебирать. Он содержит DataTables, потому что некоторые запросы могут возвращать более одной таблицы. Однако, как правило, у вас будет только одна таблица, и вы можете связать ее с ней или с чем угодно.

2 голосов
/ 24 августа 2009

В 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).

2 голосов
/ 24 августа 2009

Создайте соединение sql, откройте его, создайте команду sql, выполните ее, чтобы получить 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]);
  }
}
1 голос
/ 24 августа 2009

Ну, есть два способа взаимодействия с базой данных SQL Server в C #. Первый с LINQ, а второй с библиотекой SqlClient.

LINQ

Начиная с .NET 3.0 у нас был доступ к LINQ, который представляет собой довольно впечатляющий ORM и способ работы с коллекциями и списками. LINQ может работать с базой данных двумя способами. Это:

У Скотта Гу есть довольно хорошее руководство по 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

Традиционный способ C # поразить базу данных SQL Server (до .NET 3.0) был через библиотеку SqlClient . По сути, вы создаете SqlConnection , чтобы открыть соединение с базой данных. Если вам нужна помощь со строками подключения, проверьте ConnectionStrings.com .

После подключения к базе данных вы будете использовать объект SqlCommand для взаимодействия с ней. Наиболее важным свойством для этого объекта является CommandText. Это принимает SQL в качестве языка и запускает необработанные операторы SQL для базы данных.

Если вы делаете вставку / обновление / удаление, вы будете использовать ExecuteNonQuery метод SqlCommand. Однако, если вы делаете выбор, вы будете использовать ExecuteReader и возвращать SqlDataReader. Затем вы можете перебрать SqlDataReader, чтобы получить свои результаты.

Ниже приведен код для повторного захвата всех клиентов в Нью-Йорке:

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();

Надеюсь, это даст вам хорошее представление о том, что делает каждый подход и как узнать больше.

1 голос
/ 24 августа 2009

Я купил книгу под названием Прагматичный ADO.NET .

0 голосов
/ 24 августа 2009

См. Пример приложения ADO.NET

Примеры обложек

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();
  }
}
0 голосов
/ 24 августа 2009

В общем, я рекомендую использовать Microsoft Enterprise Library для доступа к БД. Я использовал это в нескольких проектах, и мне это очень нравится.

См. Быстрый доступ к данным , предоставленный Microsoft, который должен помочь вам начать

Кроме того, я также привык писать Методы расширения для извлечения данных из 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());

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...