1、Ado.net是什么?
通过ado.Net技术,在程序中执行sql数据库的目的
把mdf文件附加到数据库中
不用的时候可以分离
2、神奇代码
加到main方法中
string dataDir =AppDomain.CurrentDomain.BaseDirectory;
if(dataDir.EndsWith(@"\bin\Debug\") ||dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory",dataDir);
}
3、连接到SQLServer
连接字符串:程序通过连接字符串 指定要连哪台服务器上的、哪个实例的哪个数据库、用什么用户名密码等。
static void Main(string[] args)
{
//每次都复制过来即可(神奇代码)
string dataDir =AppDomain.CurrentDomain.BaseDirectory;
if(dataDir.EndsWith(@"\bin\Debug\") ||dataDir.EndsWith(@"\bin\Release\"))
{
dataDir =System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
//项目内嵌mdf文件形式的链接字符串
using (SqlConnection conn = newSqlConnection(@"Datasource=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;
Integrated Security=True;Userinstance=True")) //连数据库
“.\SQLEXPRESS”表示“本机上的SQLEXPRESS实例”,如果数据库实例名不是SQLEXPRESS,则需要修改。“Database1.mdf”为mdf的文件名。
AttachDBFilename=|DataDirectory|\Database1.mdf;
表示加入数据库文件,为当前目录下的Database1.mdf文件
如果加入的是其他文件则把文件的目录地址放到这里
SqlConnection类不存在,必须using或者ctrl+.(右键)解析
//ado.net中通过SqlConnection 类创建到SQLServer的链接,SqlConnection代表一个数据库链接,ado.net中的链接等资源都实现了IDisposable接口。
//可以使用using进行资源管理,出了using的{}区域资源链接就释放了,不用try-catch再close和dispose
//后面的command和reader都可以用using进行资源释放
4、简单的insert语句:
ExecuteNonQuery执行一个非查询语句
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
//SqlCommand表示向服务器提交的一个命令(SQL语句等)
{
cmd.CommandText = "insert into MyTable1(Name)values('abc')";
//创建commandText,CommandText属性为要执行的SQL语句
cmd.ExecuteNonQuery();
// ExecuteNonQuery方法执行一个非查询语句(Update、Insert、Delete等)
ExecuteNonQuery;返回值是执行的影响行数
Console.WriteLine("插入成功");
Console.WriteLine("打开数据库链接成功");
5、 ExecuteScalar:
using(SqlCommand cmd = conn.CreateCommand())
{
//cmd.CommandText = "select count(*)from mytable1";
cmd.CommandText ="select count(*) from T_users";
Console.WriteLine(cmd.ExecuteScalar());
//返回mytable1中第一行第一列的数据
//得到自增字段的值
cmd.CommandText ="insert into T_Users (UserName,password) output inserted.idvalues('jiangshan','147258')";
int id =Convert.ToInt32(cmd.ExecuteScalar());
Console.WriteLine("插入的主键的值:{0}", id);
}
cmd.CommandText= "select count(*) from T_Users";
inti =Convert.ToInt32(cmd.ExecuteScalar());
ExecuteScalar方法用于执行查询,并返回查询所返回的结果集中第一行的第一列,返回值是object类型。
cmd.CommandText= "Insert into T_Users(UserName,Password)
outputinserted.Id values('admin','888888')";
inti = Convert.ToInt32(cmd.ExecuteScalar());
得到自动增长字段的主键值,
在values关键词前加上output inserted.Id,其中Id为主键字段名。
执行结果就是插入的主键值,用ExecuteScalar执行最方便。
向数据库中插入数据时不用插入id是多少,id是自动增长的
cmd.CommandText= "select getdate()";
DateTimedt =Convert.ToDateTime(cmd.ExecuteScalar());
6、 ExecuteReader
执行查询:返回有多行结果集的用ExecuteReader
SqlDataReaderreader = cmd.ExecuteReader();...
while(reader.Read())数据库的遍历,只能一行一行的读,不能跳
{
Console.WriteLine(reader.GetString(1));
}