После добавления источника данных, как я могу получить к нему доступ? - PullRequest
1 голос
/ 06 марта 2012

Я добавил источник данных db для доступа к своему проекту на c #, и теперь я хочу иметь доступ к данным с помощью C #.Если щелкнуть правой кнопкой мыши источник данных и нажать «Предварительный просмотр данных», я смогу просмотреть данные из источника данных, но я не знаю, какой код использовать для доступа к этим данным.

В меню предварительного просмотра отображаются два метода .Fill и GetData (), но я не знаю, как получить к ним доступ.

Любая помощь будет оценена, спасибо!

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Похоже, вы смотрите на методы Fill / GetData, которые появляются в адаптерах таблиц DataSet.Существует множество ресурсов для примера, как связать данные, в том числе прямо здесь, на SO. Я бы посоветовал взглянуть на некоторые примеры, чтобы увидеть, как это сделать (примеры ниже для datagridviews):

Из C #: невозможно заполнить DataGridView программно :

using(SqlDataAdapter sqlDataAdapter = 
    new SqlDataAdapter("SELECT * FROM Table1",
        "Server=.\\SQLEXPRESS; Integrated Security=SSPI; Database=SampleDb"))
{
    using (DataTable dataTable = new DataTable())
    {
        sqlDataAdapter.Fill(dataTable);
        this.dataGridView1.DataSource = dataTable;
    }
}

Dev X статья в VB, но она дает вам идею:

Dim connStr As String = _
"Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;" & _
"Integrated Security=True"
Dim sql As String = "SELECT * FROM Customers"
Dim conn As SqlConnection = New SqlConnection(connStr)
Dim comm As SqlCommand = New SqlCommand(sql, conn)
Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm)
Dim ds As DataSet = New DataSet()
'---open the connection and fill the dataset---
conn.Open()
'---fill the dataset---
dataadapter.Fill(ds, "Customers_table")
'---close the connection---
conn.Close()
'---bind to the DataGridView control---
DataGridView1.DataSource = ds
'---set the table in the dataset to display---
DataGridView1.DataMember = "Customers_table"

С MSDN Привязка данных к элементу управления Windows Forms DataGridView

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form
{
    private DataGridView dataGridView1 = new DataGridView();
    private BindingSource bindingSource1 = new BindingSource();
    private SqlDataAdapter dataAdapter = new SqlDataAdapter();
    private Button reloadButton = new Button();
    private Button submitButton = new Button();

    [STAThreadAttribute()]
    public static void Main()
    {
        Application.Run(new Form1());
    }

    // Initialize the form.
    public Form1()
    {
        dataGridView1.Dock = DockStyle.Fill;

        reloadButton.Text = "reload";
        submitButton.Text = "submit";
        reloadButton.Click += new System.EventHandler(reloadButton_Click);
        submitButton.Click += new System.EventHandler(submitButton_Click);

        FlowLayoutPanel panel = new FlowLayoutPanel();
        panel.Dock = DockStyle.Top;
        panel.AutoSize = true;
        panel.Controls.AddRange(new Control[] { reloadButton, submitButton });

        this.Controls.AddRange(new Control[] { dataGridView1, panel });
        this.Load += new System.EventHandler(Form1_Load);
        this.Text = "DataGridView databinding and updating demo";
    }

    private void Form1_Load(object sender, System.EventArgs e)
    {
        // Bind the DataGridView to the BindingSource
        // and load the data from the database.
        dataGridView1.DataSource = bindingSource1;
        GetData("select * from Customers");
    }

    private void reloadButton_Click(object sender, System.EventArgs e)
    {
        // Reload the data from the database.
        GetData(dataAdapter.SelectCommand.CommandText);
    }

    private void submitButton_Click(object sender, System.EventArgs e)
    {
        // Update the database with the user's changes.
        dataAdapter.Update((DataTable)bindingSource1.DataSource);
    }

    private void GetData(string selectCommand)
    {
        try
        {
            // Specify a connection string. Replace the given value with a 
            // valid connection string for a Northwind SQL Server sample
            // database accessible to your system.
            String connectionString =
                "Integrated Security=SSPI;Persist Security Info=False;" +
                "Initial Catalog=Northwind;Data Source=localhost";

            // Create a new data adapter based on the specified query.
            dataAdapter = new SqlDataAdapter(selectCommand, connectionString);

            // Create a command builder to generate SQL update, insert, and
            // delete commands based on selectCommand. These are used to
            // update the database.
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

            // Populate a new data table and bind it to the BindingSource.
            DataTable table = new DataTable();
            table.Locale = System.Globalization.CultureInfo.InvariantCulture;
            dataAdapter.Fill(table);
            bindingSource1.DataSource = table;

            // Resize the DataGridView columns to fit the newly loaded content.
            dataGridView1.AutoResizeColumns( 
                DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
        }
        catch (SqlException)
        {
            MessageBox.Show("To run this example, replace the value of the " +
                "connectionString variable with a connection string that is " +
                "valid for your system.");
        }
    }

}
0 голосов
/ 02 марта 2019

Я знаю, что это старый вопрос, и на него есть принятый ответ, но, похоже, ответ не отвечает на этот вопрос должным образом.

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

Вот мое решение:

    private static Dictionary<string, InstrumentTransformer> InitInstrumentTransformers()
    {
        var result = new Dictionary<string, InstrumentTransformer>();

        using (var adapter = new _TSTAT_SETUPDataSetTableAdapters.SetupInstrumentTransformersTableAdapter())
        {
            var table = adapter.GetData();
            foreach (var row in table)
            {
                var instrumentTransformer = new InstrumentTransformer(row);
                result[instrumentTransformer.TransformerID] = instrumentTransformer;
            }
        }
        return result;
    }

TSTAT_SETUP - это имя базы данных Access, SetupInstrumentTransformersэто имя таблицы в нем.TransformerID является первичным ключом.

В результате получается словарь объектов, в котором каждый объект был создан из строки в базе данных.

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

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