Очень простые понятия базы данных в C#

Можно сделать это (хотя не молния быстро) как так:

people.Where(p => !people.Any(q => (p != q && p.Id == q.Id)));

таким образом, "выбирают все люди, где нет другого другого человека в списке с тем же идентификатором".

, Обратите внимание, в Вашем примере, который просто выбрал бы человека 3. Я не уверен, как сказать, который Вы хотите из предыдущих двух.

6
задан ChrisC 24 August 2009 в 01:20
поделиться

7 ответов

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

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 (это стоит денег, но определенно того стоит).

- Edit:

SqlConnection

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

SqlCommand

Что-то, что содержит оператор sql, который вы хотите отправить на сервер. Это может быть «обновление», «вставка», «выбор» или что-то еще. В зависимости от того, что это такое, вы используете другой метод для его выполнения, чтобы получить данные обратно.

SqlDataAdapter

Странный метод; он используется специально для заполнения DataSet. По сути, он выполняет небольшую работу за вас, добавляя найденную информацию в набор.

DataSet

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

8
ответ дан 8 December 2019 в 17:25
поделиться

Создайте соединение 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]);
  }
}
2
ответ дан 8 December 2019 в 17:25
поделиться

В 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
ответ дан 8 December 2019 в 17:25
поделиться

Я купил книгу под названием Pragmatic ADO.NET .

1
ответ дан 8 December 2019 в 17:25
поделиться

Что ж, есть два способа взаимодействия с базой данных 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();

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

при выполнении вставки / обновления / удаления вы будете использовать метод 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();

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

при выполнении вставки / обновления / удаления вы будете использовать метод 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
ответ дан 8 December 2019 в 17:25
поделиться

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

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

Кроме того, я также привык писать 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());

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

0
ответ дан 8 December 2019 в 17:25
поделиться

См. Пример приложения 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
ответ дан 8 December 2019 в 17:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: