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));
}