Как мне подключиться к базе данных SQL из C #? - PullRequest
17 голосов
/ 28 августа 2009

Я пытаюсь написать локальную систему управления программами и установить систему для моей домашней сети, и я думаю, что у меня есть технологии:

  • C # /. NET / WPF для клиента
  • Lua для поддержки установки сценариев (через LuaInterface)
  • SQL Server Express для ведения базы данных программ

Однако я не уверен, что конкретно я буду использовать для подключения C # к базе данных. Есть ли что-то встроенное в .NET Framework для этого? Бонусные баллы, если у вас есть предложение о том, что мне следует использовать для взаимодействия с указанной базой данных.

Ответы [ 8 ]

22 голосов
/ 28 августа 2009

Выезд

Я уверен, что есть еще много всего - просто Google для "ADO.NET" и "Учебник" ......

UPDATE:

Если вы хотите подключиться к локальной версии SQL Server Express, подключиться к базе данных «Борей» и прочитать 5 лучших клиентов из таблицы «Клиенты», вам нужно будет сделать что-то вроде этого:

string connectionString = "server=(local)\SQLExpress;database=Northwind;integrated Security=SSPI;";

using(SqlConnection _con = new SqlConnection(connectionString))
{
   string queryStatement = "SELECT TOP 5 * FROM dbo.Customers ORDER BY CustomerID";

   using(SqlCommand _cmd = new SqlCommand(queryStatement, _con))
   {
      DataTable customerTable = new DataTable("Top5Customers");

      SqlDataAdapter _dap = new SqlDataAdapter(_cmd);

      _con.Open();
      _dap.Fill(customerTable);
      _con.Close();

   }
}

Теперь у вас в DataTable будут все 5 крупнейших клиентов из вашей базы данных Northwind, и вы сможете их проверять, распечатывать, манипулировать ими - что бы вы ни хотели сделать.

Это ADO.NET в действии!

Что касается деталей строки подключения - какие параметры вы можете использовать и как они должны выглядеть, посетите веб-сайт Строки подключения - на нем есть множество примеров и объяснений.

Марк

17 голосов
/ 28 августа 2009

SqlConnection

объект создан для этого.

Например:

SqlConnection conn = new SqlConnection(
    "Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI"); 

или

SqlConnection conn = new SqlConnection(
"Data Source=DatabaseServer; Initial Catalog=Northwind; User ID=YourUserID; Password=YourPassword");

conn.Open(); // opens the database connection

Изменить:

После выполнения всех ваших действий вы должны закрыть соединение по

conn.Close();

Источник данных : Идентифицирует сервер. Это может быть локальный компьютер, имя домена компьютера или IP-адрес.

Исходный каталог : Имя базы данных.

Интегрированная безопасность : установите SSPI для установления соединения с пользовательским логином Windows

ID пользователя : имя пользователя, настроенное в SQL Server.

Пароль : Пароль совпадает с идентификатором пользователя SQL Server.

4 голосов
/ 28 августа 2009

Для подключения к SQL Server Express вам ничего не нужно, кроме System.Data, который является стандартной сборкой .NET. Просто используйте SqlXXX классы и все будет готово.

Тем не менее, написание обычного кода ADO.NET очень скучно, поэтому очень часто используется ORM или менее тяжелый сопоставитель набора результатов, такой как BLToolkit .

И, наконец, рассмотрите возможность использования SQL Server CE. Это полностью совместимый с ACID однофайловый встроенный механизм базы данных, который поддерживает практически все функции, которые можно ожидать от СУБД SQL.

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

Я бы порекомендовал использовать Корпоративная библиотека шаблонов и практик Microsoft . Вы бы конкретно использовали Блок приложения доступа к данным .

Выдержка из MSDN:

Блок приложения доступа к данным обеспечивает следующие преимущества:

  • Он использует функциональные возможности, предоставляемые ADO.NET 2.0, и с его помощью вы можете использовать функциональность ADO.NET вместе с функциональность блока приложения.
  • Это уменьшает необходимость написания стандартного кода для выполнения стандартных задачи.
  • Это помогает поддерживать согласованные методы доступа к данным, как в рамках приложение и по всему предприятию.
  • Это уменьшает трудности при изменении типа базы данных.
  • Это освобождает разработчиков от изучения различных моделей программирования. для разных типов баз данных.
  • Уменьшает объем кода, который должны писать разработчики при портировании. приложения к различным типам базы данных.

Я использовал этот метод годами, и до сих пор он был очень успешным. Удачи!

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

Вы можете использовать пространство имен ADO.Net и System.Data.SqlClient для одного и того же. Я посоветую вам перейти с Entity Framework (ORM). Пожалуйста, найдите ниже ссылки для Entity Framework пройти через

http://thedatafarm.com/LearnEntityFramework/tutorials/creating-an-ado-net-entity-framework-entity-data-model/

http://thedatafarm.com/LearnEntityFramework/tutorials/use-an-entity-framework-entity-as-a-winforms-data-source/

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

В настоящее время самый простой способ подключиться к вашей базе данных и выполнить запросы в C # - LinqToSQL .Это избавит вас от головной боли по сравнению с использованием ADO-соединений старой школы.

0 голосов
/ 24 июня 2014

Хотелось бы, чтобы это помогло просто попробуйте это ..

@ CLASS

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

namespace WindowsFormsApplication2
{
class clsDB
{
    public SqlDataAdapter mDataAdapter = new SqlDataAdapter();
    public DataSet mDataSet = new DataSet();
    public SqlConnection mConn;

    public clsDB()
    {
        mConn = new SqlConnection("Data Source=(the data source);Initial Catalog=sample;User ID=(the id);Password=(the password)");
    }



    public void SQLDB(string strSQL)
    {
        try
        {
            mDataAdapter = new SqlDataAdapter(new SqlCommand(strSQL, mConn));
            mDataSet = new DataSet();
            mDataAdapter.Fill(mDataSet);

        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            mConn.Close();
        }

    }

    public void ClearRes()
    {
        mDataAdapter.Dispose();
        mDataAdapter = null;
        mDataSet.Dispose();
        if (mConn.State != ConnectionState.Closed)
        {
            mConn.Close();

        }

    }

}
}

@ ВХОД

public partial class Login : Form
{
    clsDB x = new clsDB();

    public Login()
    {
        InitializeComponent();
    }

    private void btnSubmit_Click(object sender, EventArgs e)
    {
            x.SQLDB("select * from tbl_accounts where u_username ='" + txtUser.Text + "' and u_password ='" + txtPass.Text + "'");
            if (x.mDataSet.Tables[0].Rows.Count > 0)
            {
                Main a = new Main();
                this.Hide();
                a.Show();
            }
            else
            {
                MessageBox.Show("wrong username or password");
            }
    }

@ ГЛАВНЫЙ ДОСТУП

namespace WindowsFormsApplication2
{
public partial class Main : Form
{
    clsDB x = new clsDB();

    public Main()
    {
        InitializeComponent();
    }

    private void btnAdd_Click(object sender, EventArgs e)
    {
        x.SQLDB("insert into tbl_info (u_lastname, u_firstname, u_middlename) values ('" + atxtLN.Text + "','" + atxtFN.Text + "','" + atxtFN.Text + "')");
        fillgrid();
    }

    private void Main_Load(object sender, EventArgs e)
    {
        x.SQLDB(" select * from tbl_info ");
        dgv1.DataSource = x.mDataSet.Tables[0];
        fillgrid();
    }
    void fillgrid()
    {
        x.SQLDB("select * from tbl_info");
        dgv1.DataSource = null;
        dgv1.DataSource = x.mDataSet.Tables[0];
    }
    void search()
    {
        x.SQLDB("SELECT * from tbl_info where u_id  like '" + etxtID.Text + "%' order by u_id");
        if (x.mDataSet.Tables[0].Rows.Count > 0)
        {
            x.mDataAdapter.Fill(x.mDataSet, "tbl_info");
            dgv1.DataSource = x.mDataSet.Tables["tbl_info"].DefaultView;

            etxtLN.Text = dgv1.Rows[dgv1.CurrentRow.Index].Cells["u_lastname"].Value.ToString();
            etxtFN.Text = dgv1.Rows[dgv1.CurrentRow.Index].Cells["u_firstname"].Value.ToString();
            etxtMN.Text = dgv1.Rows[dgv1.CurrentRow.Index].Cells["u_middlename"].Value.ToString();
        }
        else if (etxtID.Text == "Type User ID to Edit")
        {
            etxtLN.Text = "";
            etxtFN.Text = "";
            etxtMN.Text = "";
        }
        else
        {
            etxtLN.Text = "";
            etxtFN.Text = "";
            etxtMN.Text = "";
        }
    }
    private void etxtID_TextChanged(object sender, EventArgs e)
    {

    }

    private void etxtID_Enter(object sender, EventArgs e)
    {
        etxtID.Text = "";
        etxtID.ForeColor = Color.Black;
    }

    private void etxtID_Leave(object sender, EventArgs e)
    {
        if (etxtID.Text == "")
        {
            etxtID.ForeColor = Color.Gray;
            etxtID.Text = "Type User ID to Edit";

            x.SQLDB(" select * from tbl_info ");
            dgv1.DataSource = x.mDataSet.Tables[0];
            fillgrid();
        }
    }

    private void etxtID_KeyUp(object sender, KeyEventArgs e)
    {
        search();
    }

    private void btnUpdate_Click(object sender, EventArgs e)
    {
        x.SQLDB("UPDATE tbl_info set u_lastname ='" + etxtLN.Text + "', u_firstname ='" + etxtFN.Text + "', u_middlename ='" + etxtMN.Text + "' where u_id =" + etxtID.Text);
        MessageBox.Show("Operation Successful!");
        fillgrid();
    }

    private void btnDelete_Click(object sender, EventArgs e)
    {
        x.SQLDB("delete from tbl_info where u_id =" + dtxtID.Text + "");
        MessageBox.Show("Operation Successful!");
        fillgrid();
    }
}
}
0 голосов
/ 28 августа 2009

Конечно, вы можете просто использовать классы в System.Data.SqlClient, хотя большинство людей будут использовать ORM. Я использую LLBLGen Pro .

...