web-dev-qa-db-ja.com

C#からSQLデータベースに接続するにはどうすればよいですか?

私はホームプログラムのローカルプログラム管理とインストールシステムを作成しようとしていますが、次のような技術を備えていると思います。

  • クライアントのC#/。NET/WPF
  • インストールスクリプトサポート用のLua(LuaInterface経由)
  • プログラムのデータベースを維持するためのSQLServer Express

ただし、C#をデータベースに接続するために具体的に何を使用するかはわかりません。このために.NETフレームワークに組み込まれているものはありますか?上記のデータベースを操作するために何を使用すべきかについて提案がある場合は、ボーナスポイントがあります。

17
RCIX

チェックアウト

そこにはもっとたくさんあると確信しています-「ADO.NET」と「Tutorial」をグーグルで検索してください......

更新:

ローカルのSQLServer Expressに接続し、「Northwind」データベースに接続して、「Customers」テーブルから上位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();

   }
}

これで、Northwindデータベースの上位5人の顧客すべてがDataTableに含まれ、それらを検査、印刷、操作することができます。

これがADO.NETの動作です。

接続文字列の詳細-使用できるオプションとその表示方法については、 接続文字列 Webサイトを確認してください。例と説明がたくさんあります。

マーク

22
marc_s

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:SQLServerで構成されたユーザーの名前。

Password:SQLServerユーザーIDと一致するパスワード。

17
rahul

SQL Server Expressに接続するには、標準の.NETアセンブリであるSystem.Dataだけが必要です。 SqlXXXクラスを使用するだけで完了です。

ただし、平凡なADO.NETコードを記述するのは非常に退屈なため、ORMまたは BLToolkit などのそれほど重い結果セットマッパーを使用することは非常に一般的です。

最後に、SQL ServerCEの使用を検討してください。これは、完全にACIDに準拠した単一ファイルの組み込みデータベースエンジンであり、SQLRDBMSから期待できるほとんどすべての機能をサポートします。

4
Anton Gogolev

現在、データベースに接続してC#でクエリを実行する最も簡単な方法は LinqToSQL です。 「旧式」のADO接続を使用する場合と比較して、頭痛の多くを節約できます。

1
Adrian Grigore

同じためにADO.NetおよびSystem.Data.SqlClient名前空間を使用できます。エンティティフレームワーク(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
MRG

MicrosoftのPatterns&Practices Enterprise Library を使用することをお勧めします。具体的には データアクセスアプリケーションブロック を使用します。

MSDNからの抜粋:

データアクセスアプリケーションブロックには、次の利点があります。

  • ADO.NET 2.0によって提供される機能を使用します。これにより、アプリケーションブロックの機能と共にADO.NET機能を使用できます。
  • これにより、標準的なタスクを実行するための定型コードを作成する必要が少なくなります。
  • アプリケーション内および企業全体の両方で、一貫したデータアクセス方法を維持するのに役立ちます。
  • データベースタイプの変更の難しさを軽減します。
  • これにより、開発者はさまざまなタイプのデータベースのさまざまなプログラミングモデルを学ぶ必要がなくなります。
  • これにより、開発者がアプリケーションをさまざまな種類のデータベースに移植するときに作成する必要があるコードの量が削減されます。

私はこの方法を何年も使用してきましたが、これまでのところ非常に成功しています。幸運を!

1
Mr. Smith

これがこれらを試すのに役立つことを願っています。

@クラス

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
cloud

もちろん、ほとんどの人はORMを使用しますが、System.Data.SqlClientのクラスを使用することもできます。 LLBLGen Pro を使用します。

0
Noon Silk