C# VSC中的SqlConnection#
我对C#web开发(或任何与此相关的开发)非常陌生,但我正在尝试找出如何将SQL查询的结果保存到变量。我想我理解这个过程,但是我在Web上找到的许多示例都使用SqlConnection语句。我的VisualStudio副本似乎没有这个命令(我很确定我在这里使用了错误的单词)。无论是软件方面还是知识方面,我都缺少什么来完成我的任务 提前感谢您的帮助。C# VSC中的SqlConnection#,c#,sql,visual-studio-2015,database-connection,C#,Sql,Visual Studio 2015,Database Connection,我对C#web开发(或任何与此相关的开发)非常陌生,但我正在尝试找出如何将SQL查询的结果保存到变量。我想我理解这个过程,但是我在Web上找到的许多示例都使用SqlConnection语句。我的VisualStudio副本似乎没有这个命令(我很确定我在这里使用了错误的单词)。无论是软件方面还是知识方面,我都缺少什么来完成我的任务 提前感谢您的帮助。 Dep这取决于您要执行的操作:插入、更新、获取数据。这还取决于是否要使用ORM库。我看情况而定。下面我复制的代码是一个如何使用Ado.Net检索Da
Dep这取决于您要执行的操作:插入、更新、获取数据。这还取决于是否要使用ORM库。我看情况而定。下面我复制的代码是一个如何使用Ado.Net检索DataTable的示例(正如您提到的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();
}
}
这取决于您想做什么:插入、更新、获取数据。这还取决于是否要使用ORM库。我看情况而定。下面我复制的代码是一个如何使用Ado.Net检索DataTable的示例(正如您提到的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();
}
}
如果您真的不熟悉使用SQL Server的C#,我建议您从零开始使用所示的教程之一。它以循序渐进的方式提供了大量信息:
SqlConnection
是一个有效的选择,但在编写查询时需要花费更多的精力来完成选择、更新、删除或插入数据等基本工作。实际上,您必须构造查询,并注意生成和处理命令。如果您对使用SQL Server的C#非常陌生,我建议您从零开始使用所示的教程之一。它以循序渐进的方式提供了大量信息:
SqlConnection
是一个有效的选择,但在编写查询时需要花费更多的精力来完成选择、更新、删除或插入数据等基本工作。实际上,您必须构造查询,并注意生成和处理命令。相关注释:
在C#或.NET中执行所有数据库相关活动的新方法是利用实体框架(EF),并尝试摆脱任何基于ADO.NET的代码。不过,后者仍然存在,并没有被标记为过时。您可能希望将ADO.NET用于小型应用程序或任何PoC任务。但是,除此之外,EF是一条路要走
EF是一个ORM,实际上是作为存储库模式构建的,并生成一个供我们使用的概念层。连接和指挥的所有细微差别都被我们完全概括了出来。这样,我们就不必干涉这些赤裸裸的事情。相关注释:
在C#或.NET中执行所有数据库相关活动的新方法是利用实体框架(EF),并尝试摆脱任何基于ADO.NET的代码。不过,后者仍然存在,并没有被标记为过时。您可能希望将ADO.NET用于小型应用程序或任何PoC任务。但是,除此之外,EF是一条路要走
EF是一个ORM,实际上是作为存储库模式构建的,并生成一个供我们使用的概念层。连接和指挥的所有细微差别都被我们完全概括了出来。这样,我们就不必干涉这些基本问题。如果您想做得好,您必须在项目中编辑一个名为Web.config的文件,并在其中放入类似的内容(使用您自己的数据库数据): 最后,您可以使用“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();
}
如果您想做好这项工作,您必须在项目中编辑一个名为Web.config的文件,并在其中放入类似的内容(使用您自己的DB数据): 最后,您可以使用“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();
}
这是我能想到的最简单的例子,注意使用语句和注释
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();
}
}
}
这是我能想到的最简单的例子,注意使用语句和注释
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();
}
}
}
我使用这个nuget库。
我使用这个nuget库。
您需要使用System.Data.SqlClient引用System.Data和
您需要一个对System.Data的引用和一个使用System.Data.SqlClient
您不需要ExecuteDataset
中的conn.Open()
,因为da.Fill(ds)
将在连接尚未打开时打开连接,在调用时关闭连接(即保持ConnectionState
不变)。谢谢,不知道:)如果您的连接和命令使用,你最好马上用你自己的价值观来代替我很抱歉,但我不清楚。我正在编写与第二个示例类似的代码,但VS2015似乎根本不理解“var conn=new SqlConnection”行。“找不到类型或命名空间名称SqlConnection”是我得到的错误。您不需要ExecuteDataset
中的conn.Open()
,因为da.Fill(ds)
将在连接尚未打开时打开连接,在调用时关闭时关闭连接(即,它保持连接状态
不变)。谢谢,我不知道:)如果您的连接和命令使用using,您拥有的会更好