我正在用C#编写一个控制台程序,我需要使用一个数据库
我正在寻找有关从C#控制台程序连接和使用数据库的非常基本的教程。我还没有找到足够基本的东西,我希望这里的人能帮我找到我需要的信息。我已经阅读了MSDN上的资料,但MSDN假定我仍在寻找有关这些事情的基本知识。
我在项目中的VS Express中创建了一个数据库,创建了表,并在表中写了一些启动记录。我试图找出这些东西究竟是什么,以及如何确定如何在我的项目中应用它们:
的SQLConnection
SQLConnection类
的SqlCommand
的SqlDataAdapter
数据集
感谢。
答案 0 :(得分:8)
类似的东西:
using System.Data;
using System.Data.SqlClient;
using(SqlConnection connection = new SqlConnection("")){
SqlCommand command = new SqlCommand(@"
insert into
tblFoo (
col1,
col2
) values (
@val1,
@val2
)",
connection
);
SqlParameter param = new SqlParameter("@val1", SqlDbType.NVarChar);
param.Value = "hello";
command.Parameters.Add(param);
param = new SqlParameter("@val2", SqlDbType.NVarChar);
param.Value = "there";
command.Parameters.Add(param);
command.ExecuteNonQuery();
connection.Close();
}
- 编辑:
当然,当你开始做严肃的事情时,我推荐一个ORM。我使用LLBLGen(它花钱,但绝对值得)。
- 编辑:
<强>的SqlConnection 强>
与数据库通信的内容。这将保留名称 服务器,用户名,密码和其他错误的东西。
<强>的SqlCommand 强>
包含要发送到服务器的sql语句的东西。这可能是“更新”或“插入”或“选择”或任何内容。根据它的不同,您可以使用不同的方法来执行它,以便可以获取数据。
<强>的SqlDataAdapter 强>
一个奇怪的人;它专门用于填充'DataSet'。它基本上为您做了一些工作,将它找到的信息添加到集合中。<强>数据集强>
不确定你想要多么简单。它只是一个表格式格式的返回数据集合,您可以迭代。它包含DataTables,因为某些查询可以返回多个表。但通常情况下,您只有一个表,您可以绑定它,或者其他任何表。
答案 1 :(得分:2)
创建一个sqlconnection,打开它,创建一个sqlcommand,执行它来获取一个sqldatareader,瞧。对于一个简单的例子,您不需要数据适配器。
string connectionString = "...";
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string sql = "select field from mytable";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0]);
}
}
答案 2 :(得分:2)
有一个关于ADO.NET的教程,涵盖了你在http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson01.aspx寻找的很多东西。第1课主要是背景知识,但第2课及以后的课程是SQL客户端对象。
http://www.codeproject.com/KB/database/sql_in_csharp.aspx的另一个教程涵盖了一些基础知识(SqlConnection,SqlCommand)。
答案 3 :(得分:1)
我买了一本名为Pragmatic ADO.NET的书。
答案 4 :(得分:1)
嗯,有两种方法可以在C#中与SQL Server数据库进行交互。第一个是LINQ,第二个是SqlClient库。
自.NET 3.0以来,我们已经可以访问LINQ,这是一个非常令人印象深刻的ORM以及处理集合和列表的方式。 LINQ可以通过两种不同的方式与数据库配合使用。他们是:
Scott Gu在LINQ to SQL上有一个非常好的教程。我建议LINQ to SQL刚入门,你可以在LINQ to Entities中使用很多这样的东西。
获取纽约所有客户的样本select
将是:
var Custs = from c in Customers
where c.State = 'NY'
select c;
foreach(var Cust in Custs)
{
Console.WriteLine(Cust.Name);
}
命中SQL Server数据库(pre -.NET 3.0)的传统C#方法是通过SqlClient library。实质上,您创建一个SqlConnection来打开与数据库的连接。如果您需要有关连接字符串的帮助,请查看ConnectionStrings.com。
连接到数据库后,您将使用SqlCommand
对象与其进行交互。此对象最重要的属性是CommandText
。这接受SQL作为其语言,并将对数据库运行原始SQL语句。
如果您正在进行插入/更新/删除,则将使用SqlCommand
using System.Data;
using System.Data.SqlClient;
//...
SqlConnection dbConn = new
SqlConnection("Data Source=localhost;Initial Catalog=MyDB;Integrated Security=SSPI");
SqlCommand dbComm = new SqlCommand();
SqlDataReader dbRead;
dbConn.Open();
dbComm.Connection = dbConn;
dbComm.CommandText = "select name from customers where state = @state";
dbComm.Parameters.Add("@state", System.Data.SqlDbType.VarChar);
dbComm.Parameters["@state"].Value = "NY";
dbRead = dbComm.ExecuteReader();
if(dbRead.HasRows)
{
while(dbRead.Read())
{
Console.WriteLine(dbRead[0].ToString());
}
}
dbRead.Close();
dbConn.Close();
方法。但是,如果您正在进行选择,则会使用ExecuteNonQuery
并返回ExecuteReader
。然后,您可以遍历SqlDataReader以获得结果。
以下是再次抓住纽约所有客户的代码:
{{1}}
希望这能为您介绍每种方法的作用以及如何学习更多内容。
答案 5 :(得分:0)
通常,我建议使用Microsoft Enterprise Library进行数据库访问。我在一些项目中使用它,我非常喜欢它。
请参阅Microsoft提供的Data Access Quickstart,以帮助您入门
此外,我也习惯于编写Extension Methods来从DataRows中提取数据。例如,我可以这样做:
//Create an extension method, Value,
//to extract a certain type from a DataRow,
//supplying a default value to be used if DbNull.Value is encountered
DateTime someDateValue = dr["SomeDatabaseField"].Value(new DateTime());
希望这有帮助!
答案 6 :(得分:0)
示例封面
<强>的SqlClient 强>
using System;
using System.Data;
using System.Data.SqlClient;
class Sample
{
public static void Main()
{
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");
SqlCommand catCMD = nwindConn.CreateCommand();
catCMD.CommandText = "SELECT CategoryID, CategoryName FROM Categories";
nwindConn.Open();
SqlDataReader myReader = catCMD.ExecuteReader();
while (myReader.Read())
{
Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
}
myReader.Close();
nwindConn.Close();
}
}
<强>的OleDb 强>
using System;
using System.Data;
using System.Data.OleDb;
class Sample
{
public static void Main()
{
OleDbConnection nwindConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");
OleDbCommand catCMD = nwindConn.CreateCommand();
catCMD.CommandText = "SELECT CategoryID, CategoryName FROM Categories";
nwindConn.Open();
OleDbDataReader myReader = catCMD.ExecuteReader();
while (myReader.Read())
{
Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
}
myReader.Close();
nwindConn.Close();
}
}
<强> ODBC 强>
using System;
using System.Data;
using System.Data.Odbc;
class Sample
{
public static void Main()
{
OdbcConnection nwindConn = new OdbcConnection("Driver={SQL Server};Server=localhost;" +
"Trusted_Connection=yes;Database=northwind");
OdbcCommand catCMD = new OdbcCommand("SELECT CategoryID, CategoryName FROM Categories", nwindConn);
nwindConn.Open();
OdbcDataReader myReader = catCMD.ExecuteReader();
while (myReader.Read())
{
Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
}
myReader.Close();
nwindConn.Close();
}
}