【问题标题】:How run a C# query?如何运行 C# 查询?
【发布时间】:2017-01-21 00:21:48
【问题描述】:

我使用 Visual Studio 社区 2015 并使用 MySQL 连接器(MySQL for Visual Studio)将我的 MySQL 数据库连接到 Visual Studio,这部分已经完成,我已将 Visual Studio 连接到数据库。

现在我想知道下一步如何从数据库获取(使用选择查询)数据到我的表单程序?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Test_1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // How can i get data from the database in here ?
    }
}
}

我得到了答案!检查最佳答案。

【问题讨论】:

  • 这看起来像 C#/CLI,而不是 C++。
  • @NathanOliver 我的错误,我的意思是 C# 抱歉
  • 我知道您的意思是先在 Google 中输入完全相同的问题,然后找到可以尝试的内容,如果您遇到特定问题,请在此处询问。我们随时为您提供帮助,但您必须自己动手。
  • @ShannonHolsinger 相信我,我做到了!我也可以分享我测试过的代码!问题是我不知道该怎么做,我不知道问题出在哪里!所以我只是问如何提问!
  • 请这样做 - 这会让我们更好地帮助您。

标签: c# mysql select


【解决方案1】:

我得跑一会儿,所以我会告诉你你已经尝试过的东西并发布这个希望它可以帮助你(很高兴看到你做了什么知道如何提供帮助你)。

你说你有连接工作。以下是一些基本查询的示例。要记住的最重要的事情是有很多不同的方法可以做到这一点,所以这些只是作为示例。它们都是手动的——为了帮助自动绑定数据,你必须发布并询问。

请在学习时请注意 - 请确保您始终使用参数,并且不要执行“UPDATE myUserData set DRIVER_LICENSE = 'U7439821' WHERE LAST_NAME = 'Smith'”之类的操作。如果你这样做,你就是在乞求坏事发生在你身上。多花 30 秒时间使用 command.Parameter.Add(,)。

最后,这些示例适用于 MS-SQL Server。您需要将连接从 SqlConnection 更改为 MySqlConnection,从 SQLCommand 更改为 MySqlCommand。

如果您有任何其他问题,请尽管提问。

 //these are connection methods that help connect you to your database manually.
 public SqlConnection getConn()
    {
        return new SqlConnection(getConnString());
    }
    public string getConnString()
    {
        return @"Data Source=lily.arvixe.com;Initial Catalog={My_Database_Name};Persist Security Info=True;User ID={My_Database_Username};Password={My_Database_Password};Connection Timeout=7000";
    }

   //to get a single value from a single field:
   public object scalar(string sql)
    {
        object ret;
        using (SqlConnection conn = getConn())
        {
            conn.Open();
            using (SqlCommand com = conn.CreateCommand())
            {
                com.CommandText = sql;
                ret = com.ExecuteScalar();
            }
            conn.Close();

        }
        return ret;
    }
    //To do a SELECT with multiple rows returned
    private List<string> get_Column_Names(string tableName)
    {
        List<string> ret = new List<string>();
        using (SqlConnection conn = getConn())
        {
            conn.Open();
            using(SqlCommand com = conn.CreateCommand())
            {
                com.CommandText = "select column_Name from INFORMATION_SCHEMA.COLUMNS where table_Name = '" + tableName + "'";
                com.CommandTimeout = 600;
                SqlDataReader read = com.ExecuteReader();
                while (read.Read())
                {
                    ret.Add(Convert.ToString(read[0]));
                }
            }
            conn.Close();
        }
        return ret;
    }
    // to do an INSERT or UPDATE or anything that does not return data
    // USE PARAMETERS if people go anywhere near this data
    public void nonQuery(string sql)
    {
        using(SqlConnection conn = getConn())
        {
            conn.Open();
            using(SqlCommand com = conn.CreateCommand())
            {
                com.CommandText = sql;
                com.CommandTimeout = 5900;
                com.ExecuteNonQuery();
            }
            conn.Close();

        }

    }
    //to save a DataTable manually:
    public void saveDataTable(string tableName, DataTable table)
    {
        using (SqlConnection conn = getConn())
        {
            conn.Open();
            using (var bulkCopy = new SqlBulkCopy(conn))//, SqlBulkCopyOptions.KeepIdentity))
            {

                // my DataTable column names match my SQL Column names, so I simply made this loop. However if your column names don't match, just pass in which datatable name matches the SQL column name in Column Mappings
                foreach (DataColumn col in table.Columns)
                {
                    bulkCopy.ColumnMappings.Add(col.ColumnName, "[" + col.ColumnName + "]");

                }
                bulkCopy.BulkCopyTimeout = 8000;
                bulkCopy.DestinationTableName = tableName;
                bulkCopy.BatchSize = 10000;
                bulkCopy.EnableStreaming = true;
                // bulkCopy.SqlRowsCopied += BulkCopy_SqlRowsCopied;
                //bulkCopy.NotifyAfter = 10000;
                //isCopyInProgess = true;
                bulkCopy.WriteToServer(table);
            }
            conn.Close();
        }
    }

同样,以编程方式完成每一项任务的方法不止几种 - 我只是向您展示最基本的方法。如果您想了解如何自动将控件绑定到数据,请尝试搜索“C-sharp Databind CONTROL_NAME Visual Studio”,您应该会获得所需的所有帮助。

【讨论】:

  • 好的 - 这些应该对您有所帮助。使用阅读器时,您需要将每个字段的数据类型转换为其预期的实际数据类型(我给出的示例是针对另一个只需要返回字符串的 SO 问题。此外,我没有使用任何 TRY/CATCH/FINALLY为了简单起见,如果出现问题,这将引发异常。在您弄清楚基础知识后,返回并添加错误处理。
  • 谢谢,我需要一些时间才能弄清楚 :D 但是谢谢 :)
【解决方案2】:

我得到了答案:

MySqlConnection sqlConnection1 = new MySqlConnection("server=server;uid=username;" + "pwd=password;database=database;");
MySqlCommand cmd = new MySqlCommand();
MySqlDataReader reader;

cmd.CommandText = "SELECT * FROM table";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1;

sqlConnection1.Open();
reader = cmd.ExecuteReader();

try
{
 reader.Read();
 value = reader.GetString(x);
}
finally
{
 reader.Close();
} 

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 2020-09-14
    • 2015-01-08
    • 2013-08-05
    • 2016-09-29
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多