Как подключиться к базе данных SQL с C#?
Я пытаюсь написать локальное управление программами и установить систему для своей домашней сети, и я думаю, что у меня есть технологии, прибитые:
- C# / .NET / WPF для клиента
- Lua для поддержки сценариев установки (через LuaInterface)
- SQL Server Express для обслуживания базы данных программ
однако я не уверен, что конкретно я буду использовать для подключения C# к базе данных. Есть ли что-то встроенное в .NET рамки для этого? Бонусные очки, если у вас есть предложения о том, что я должен использовать для взаимодействия с базой данных.
8 ответов
проверить
Я уверен, что есть еще много там - просто google для "ADO.NET" и "учебник"......
обновление:
Если вы хотите подключиться к локальному SQL Server Express и подключиться к базе данных "Northwind", а также прочитать ТОП-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();
}
}
теперь у вас будут все 5 лучших клиентов из вашей базы данных Northwind в DataTable, и вы можете их проверять, распечатывать, манипулировать ими - все, что вы хотите сделать.
Это ADO.NET в действии!
что касается деталей строки подключения - какие параметры вы можете использовать и как она должна выглядеть, проверьте Строк Подключения веб-сайт - это Т примеров и объяснений.
Марк
"объект" для этого.
например:
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
Edit:
после выполнения всех ваших вещей вы должны закрыть соединение
conn.Close();
Исходные Данные: определяет сервер. Может быть локальная машина, имя домена машины или IP-адрес.
Исходный Каталог: база данных имя.
Комплексная Безопасность: установите значение SSPI для подключения к Windows login
идентификатор пользователя: имя пользователя, настроенного в SQL Server.
пароль: пароль, соответствующий идентификатору пользователя SQL Server.
для подключения к SQL Server Express вам не нужно ничего, кроме System.Data
, который является стандартной сборкой .NET. Просто используйте SqlXXX
классы и вы будет сделано.
однако, написание мирского ADO.NET код очень скучный, поэтому очень часто используется ORM или менее тяжелый результирующий набор, такой как BLToolkit.
и, наконец, рассмотрите возможность использования SQL Server CE. Это полностью совместимый с ACID однофайловый встроенный компонент database engine, который поддерживает практически любые функция, которую вы можете ожидать, формирует SQL RDBMS.
вы можете использовать ADO.Net и система.Данные.Пространство имен SqlClient для того же. Я посоветую вам пойти с Entities framework (ORM). Ниже приведены ссылки на Entity Framework walk through
Я бы рекомендовал использовать шаблоны и практики Microsoft Enterprise Library. Вы бы специально использовали Блок Приложений Доступа К Данным.
выдержка из MSDN:
Блок Приложений Доступа К Данным предоставляет следующие преимущества:
- он использует функциональность, предоставляемую ADO.NET 2.0 и с ним вы можете использовать функции ADO.NET вместе с блок приложений функциональность.
- IT уменьшает потребность написать код boilerplate для того чтобы выполнить стандарт задачи.
- оно помогает поддерживать последовательные практики доступа к данным, и внутри применение и по всему предприятию.
- это уменьшает трудности при изменении типа базы данных.
- это избавляет разработчиков от изучения различных моделей программирования для различных типов баз данных.
- это уменьшает количество кода, который разработчики должны писать, когда они порт применения к разным видам база данных.
Я использовал этот метод в течение многих лет, и очень успешно до сих пор. Удачи!
в настоящее время самый простой способ подключения к базе данных и выполнения запросов в C#LinqToSQL. Это избавит вас от головной боли по сравнению с использованием соединений ADO "старой школы".
разумеется, вы можете просто использовать классы в системе.Данные.SqlClient, хотя большинство людей будут использовать ORM. Я использую LLBLGen Pro.
Я хочу, чтобы это помогло просто попробуй это..
@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();
}
}
}
}
@LOGIN
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");
}
}
@MAIN ACCESS
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();
}
}
}