繁体   English   中英

VS2015 C#中的SqlConnection

[英]SqlConnection in VS2015 C#

我对 C# web 开发(或任何与此相关的开发)非常陌生,但我试图弄清楚如何将 SQL 查询的结果保存到变量中。 我想我理解这个过程,但是我在网上找到的许多例子都使用了 SqlConnection 语句。 我的 Visual Studio 副本似乎没有该命令(很确定我在这里使用了错误的词)。 我在软件方面或知识方面缺少什么来完成我的任务?

预先感谢您的帮助。

这取决于您想要做什么:插入、更新、获取数据。 这也取决于您是否想使用 ORM 库。 我都取决于。 我在下面复制的代码是如何使用 Ado.Net 检索数据表的示例(如您提到的 SqlConnection):

你必须使用:

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

这是检索数据表的代码

    private DataSet ExecuteDataset(string query)
    {
        var conn = new SqlConnection("Data Source=" + Server + ";Initial Catalog=" + Database + ";User Id=" + Username + ";Password=" + Password + ";");
        DataSet ds;
        try
        {
            conn.Open();
            ds = new DataSet();
            var da = new SqlDataAdapter(query, conn);
            da.Fill(ds);
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            conn.Dispose();
            conn.Close();
        }
        return ds;
    }

       private DataSet ExecuteDataset(string query, SqlParameter[] parametros)
        {
            var conn = new SqlConnection("Data Source=" + Server + ";Initial Catalog=" + Database + ";User Id=" + Username + ";Password=" + Password + ";");
            DataSet ds;
            try
            {
                conn.Open();

                SqlCommand command = conn.CreateCommand();
                command.CommandText = query;

                foreach (SqlParameter p in parametros)
                {
                    command.Parameters.Add(p);
                }

                ds = new DataSet();
                var da = new SqlDataAdapter(command);
                da.Fill(ds);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                conn.Dispose();
                conn.Close();
            }
            return ds;
        }

这是运行查询的代码,该查询不期望带参数和不带参数的结果:

    private void ExecuteNonQuery(string query)
    {
        var conn = new SqlConnection("Data Source=" + Server + ";Initial Catalog=" + Database + ";User Id=" + Username + ";Password=" + Password + ";");
        try
        {
            conn.Open();
            SqlCommand command = conn.CreateCommand();
            command.CommandText = query;
            command.ExecuteNonQuery();
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            conn.Dispose();
            conn.Close();
        }
    }

    private void ExecuteNonQuery(string query, SqlParameter[] parametros)
    {
        var conn = new SqlConnection("Data Source=" + Server + ";Initial Catalog=" + Database + ";User Id=" + Username + ";Password=" + Password + ";");
        try
        {
            conn.Open();
            SqlCommand command = conn.CreateCommand();
            command.CommandText = query;

            foreach (SqlParameter p in parametros)
            {
                command.Parameters.Add(p);
            }

            command.ExecuteNonQuery();
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            conn.Dispose();
            conn.Close();
        }
    }

这是我能想到的最简单的例子,注意 using 语句和注释

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

namespace DataAccess
{
    class Program
    {
        static void Main(string[] args)
        {
            //Use your database details here.
            var connString = @"Server=localhost\SQL2014;Database=AdventureWorks2012;Trusted_Connection=True;";

            //Enter query here, ExecuteScalar returns first column first row only
            //If you need to return more records use ExecuteReader/ExecuteNonQuery instead
            var query = @"SELECT [AccountNumber]
                          FROM [Purchasing].[Vendor]
                          where Name = @Name";

            string accountNumber = string.Empty;

            //Using statement automatically closes the connection so you don't need to call conn.Close()
            using (SqlConnection conn = new SqlConnection(connString))
            {
                SqlCommand cmd = new SqlCommand(query, conn);
                //Replace @Name as parameter to avoid dependency injection
                cmd.Parameters.Add("@Name", SqlDbType.VarChar);
                cmd.Parameters["@name"].Value = "Michael";
                try
                {
                    conn.Open();
                    //Cast the return value to the string, if it's an integer then use (int)
                    accountNumber = (string)cmd.ExecuteScalar();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            Console.WriteLine(accountNumber);
            //ReadKey just to keep the console from closing
            Console.ReadKey();

        }
    }
}

如果您真的不熟悉使用 SQL Server 的 C#,我建议您使用此处显示的教程之一从头开始。 它以循序渐进的方式提供了大量信息:

  1. 基础知识
  2. 核心概念的清晰定义
  3. 如何设置依赖项以开始使用
  4. 如何在开发模型之间进行选择(代码、模型与数据库优先)
  5. 如何编写查询

以及更多。

使用SqlConnection是一个有效的选择,但需要更多的努力来编写查询来执行基本的操作,例如选择、更新、删除或插入数据。 您实际上必须构建查询并注意构建和处理命令。

在相关说明中:

在 C# 或 .NET 中执行所有与数据库相关的活动的新方法是利用实体框架 (EF),并尝试远离任何基于 ADO.NET 的代码。 不过,后者仍然存在并且没有被标记为过时。 您可能希望将 ADO.NET 用于小型应用程序或任何 PoC 任务。 但是,否则,EF 是要走的路。

EF 是一个 ORM,确实是作为存储库模式构建的,并生成一个概念层供我们使用。 连接和命令的所有细微差别都完全由我们封装。 这样,我们就不必干预这些基本框架。

如果你想做得好,你必须在你的项目中编辑一个名为 Web.config 的文件,并将这样的内容放入其中(使用你自己的数据库数据):

<connectionStrings >
    <add
         name="myConnectionString" 
         connectionString="Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;"
         providerName="System.Data.SqlClient"/>

</connectionStrings>

然后,在代码中,您可以将其用于:

SqlConnection con = new SqlConnection(
    WebConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString);

最后,您可以使用“con”执行您想要的操作,例如:

string queryString = "SELECT name, surname FROM employees";

SqlCommand command = new SqlCommand(queryString, con);
con.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}, {1}",
        reader["name"], reader["surname"]));
    }
}
finally
{
    reader.Close();
}

我使用这个 nuget 库。 https://www.nuget.org/packages/SqlServerDB_dotNET/

using SqlServerDB;

string server = @"INSTANCE\SQLEXPRESS";
string database = "DEMODB";
string username = "sa";
string password = "";

string connectionString = @"Data Source="+ server + ";Initial Catalog="+ database + "; Trusted_Connection=True;User ID="+ username + ";Password="+ password + "";
DBConnection db_conn = new DBConnection(connectionString);

Console.WriteLine("IsConnected: " + db_conn.IsConnected());
if (db_conn == null || !db_conn.IsConnected())
{
Console.WriteLine("Connessione non valida.");
return;
}

string sql = "SELECT ID, Message FROM Logs ORDER BY IDLic;";
DataTable dtLogs = db_conn.SelectTable(sql);

if (dtLogs == null || dtLogs.Rows.Count == 0)
return;

// Loop with the foreach keyword.
foreach (DataRow dr in dtLogs.Rows)
{
Console.WriteLine("Message: " + dr["Message"].ToString().Trim());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM