首先申明,本人編程菜鳥,本文只是自己的一個總結,各位看客莫笑!
今天閑來無事,寫了一段C#.NET 串連 SQLServer 的代碼, 寫的過程中尋找了一些資料,並遇到了一些問題,
閑話少說,先上代碼。
using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using System.Data;<br />using System.Data.SqlClient;<br />namespace Test<br />{<br /> public class DBConnection<br /> {<br /> public static void getDBData(out List<string[]> rsltList)<br /> {<br /> rsltList = new List<string[]>();<br /> SqlConnection objConnection = null;<br /> try<br /> {<br /> string strConnection = "Persist Security Info=False;user id=myID;password=myPWD;initial catalog=northwind;Server=mySQLServer;Connect Timeout=30";<br /> // myID就是使用者名稱<br /> // myPWD就是密碼<br /> // northwind為你要使用的資料來源,也就是說你要的資料庫的名稱·<br /> // 資料庫所在伺服器(可以寫IP地址)<br /> objConnection = new SqlConnection(strConnection);<br /> objConnection.Open();<br /> // table_a為檢索的表<br /> SqlCommand objsql = new SqlCommand("select * from table_a");<br /> objsql.Connection = objConnection;<br /> SqlDataReader myreader = objsql.ExecuteReader();<br /> while (myreader.Read())<br /> {<br /> string[] str = new string[6];<br /> // 下面一堆為table_a表裡面的欄位<br /> str[0] = myreader.GetString(myreader.GetOrdinal("BookNumber"));<br /> str[1] = myreader.GetString(myreader.GetOrdinal("BookName"));<br /> str[2] = myreader.GetString(myreader.GetOrdinal("Publisher"));<br /> str[3] = myreader.GetString(myreader.GetOrdinal("Buyday"));<br /> str[4] = myreader.GetString(myreader.GetOrdinal("Country"));<br /> str[5] = myreader.GetString(myreader.GetOrdinal("Field"));<br /> rsltList.Add(str);<br /> }<br /> }<br /> finally<br /> {<br /> objConnection.Close();<br /> }<br /> }<br /> }<br />}
1,string strConnection = "Persist Security Info=False;user id=myID;password=myPWD;initial catalog=northwind;Server=mySQLServer;Connect Timeout=30";
這一段應該就是串連DB之前的一些設定了。
包括了使用者名稱,密碼,資料庫名,伺服器位址等等。
如果你的SQL Server設定為Windows登入,那麼在這裡就不需要使用“user id”和“password”這樣的方式來登入,而需要使用“Trusted_Connection=SSPI”來進行登入。
代碼如下: string strConnection = "Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer;Connect Timeout=30";
PS:Persist Security Info=False 是什麼意思?(具體上google看看)
Persist Security
Info屬性的意思是表示是否儲存安全資訊,其實可以簡單的理解為"ADO在資料庫連接成功後是否儲存密碼資訊",
True表示儲存,False表示不儲存。
2,寫代碼中遇到了2個問題
a問題:
System.InvalidOperationException
是 ServerVersion = 'objConnection.ServerVersion' 的例外。
具體內容是: 操作無效,接續處於關閉狀態。
但是這個exception沒有被throw出來,等到objConnection.Open() 被執行之後,
ServerVersion 就顯示出來了。
仔細想想,這個應該不算exception吧?
因為你都還沒有open,人家當然會報 “操作無效,接續處於關閉狀態”這個“警告”啦!(猜想,呵呵,不要砸我!)
b問題:
ExecuteReader: Connection 屬性沒有被初期化
於是加上: objsql.Connection = objConnection
問題得以解決。
仔細想想,不然一個sqlcommand怎麼知道我用的是哪個connection,取的是哪個DB啊?!
有時候代碼看著挺簡單,可是就這麼幾句代碼寫起來還碰到好幾個問題呢。
只是果然是在於積累啊!
以後就記住了!