[點晴永久免費OA]C#操作sql server(示例代碼)
簡介 這篇文章主要介紹了C#操作sql server(示例代碼)以及相關的經(jīng)驗技巧,值得參考! C#操作sqlserver跟操作其他數(shù)據(jù)沒有太大差別,但是又一些細節(jié)要注意一下。 在安裝sqlserver時不要選擇默認實例,如果是則需要更改設置,還有遠程連接要去連接服務中設置一下,如端口1433等,這些百度一下就可以了。下面開始介紹一些最基本的數(shù)據(jù)庫操作。 (一)建立數(shù)據(jù)庫 static void SQLDBcreate(string dbname) { //通過連接到本身存在的db master連接到sqlserver string connStr = "Server = localhost;User Id=sa;Password=******; database = master"; SqlConnection conn = new SqlConnection(connStr); conn.Open(); //如果當前數(shù)據(jù)庫是正在狀態(tài)是無法刪除的,所以把master設置為當前狀態(tài),若數(shù)據(jù)庫存在則刪除重建 //此處出問題一般為數(shù)據(jù)安裝過程中為默認實例,改為特定實例,然后啟動服務中心,在ip3更改相關ip為本機,并把tcp端口改為1433 //其他更改為是,同時在服務中restart即可以 string sql= "use master;" + "IF DB_ID(N‘{0}‘) IS NOT NULL " + "drop DATABASE {0};" + "create DATABASE {0}"; sql = string.Format(sql, dbname); try { SqlCommand cmd = new SqlCommand(sql, conn); cmd.executeNonQuery(); Console.WriteLine("createdb_success"); } catch (Exception ex) { Console.WriteLine("createdb_failed:"+ex.Message); } finally { conn.Close(); } } (二)在建立的數(shù)據(jù)庫中建表 static void Tablecreate(string dbname,string tablename) { string connStr = "Server = localhost;User Id=sa;Password=********; database = {0}"; connStr = string.Format(connStr, dbname); string sql= "IF OBJECT_ID(N‘{1}..{0}‘, N‘U‘) IS NOT NULL " + "drop TABLE {0};" + "create TABLE {0}" + "(ID [int] NOT NULL Primary Key," + "Name [char] (40) NULL ," + "Price [char] (40) NULL," + "dPrice [char] (40) NULL)"; sql = string.Format(sql, tablename, dbname); SqlConnection conn = new SqlConnection(connStr); conn.Open(); try { SqlCommand cmd = new SqlCommand(sql, conn); cmd.executeNonQuery(); Console.WriteLine("createtable_success"); } catch(Exception ex) { Console.WriteLine("createtable_failed:" + ex.Message); } finally { conn.Close(); } } (三)想表中添加數(shù)據(jù) static void FillTable(string dbname,string tablename) { string connStr = "Server = localhost;User Id=sa;Password=********; database = {0}"; connStr = string.Format(connStr, dbname); SqlConnection conn = new SqlConnection(connStr); conn.Open(); string sql= "insert INTO {0}(ID,name,price,dPrice)" + "values(@d,@a,@b,@c)"; sql = string.Format(sql, tablename); try { for(int i=0;i<100;i++) { SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.AddWithValue("@d", i); cmd.Parameters.AddWithValue("@a", Guid.NewGuid()); cmd.Parameters.AddWithValue("@b", i.ToString()); cmd.Parameters.AddWithValue("@c", i.ToString()); cmd.executeNonQuery(); } Console.WriteLine("filltable_success"); } catch(Exception ex) { Console.WriteLine("filltable_failed:" + ex.Message); } finally { conn.Close(); } } (四)刪除表格 static void deleteTable(string dbname,string tablename) { string connStr = "Server = localhost;User Id=sa;Password=*********; database = {0}"; connStr = string.Format(connStr, dbname); SqlConnection conn = new SqlConnection(connStr); conn.Open(); string sql= "IF OBJECT_ID(N‘{0}..{1}‘, N‘U‘) IS NOT NULL " + "drop TABLE {1};"; sql = string.Format(sql, dbname, tablename); try { SqlCommand cmd = new SqlCommand(sql, conn); cmd.executeNonQuery(); Console.WriteLine("deletetable_success"); } catch(Exception ex) { Console.WriteLine("deletetable_failed:" + ex.Message); } finally { conn.Close(); } } (五)讀取數(shù)據(jù)庫中數(shù)據(jù) static void TransToDS(string dbname,string tablename) { string connStr = "Server =.;User Id=sa;Password=*******; database = {0}"; connStr = string.Format(connStr, dbname); SqlConnection conn = new SqlConnection(connStr); conn.Open(); string sql = "select *from {0}"; sql = string.Format(sql, tablename); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataAdapter apt = new SqlDataAdapter(cmd); SqlCommandBuilder sb = new SqlCommandBuilder(apt); DataSet ds = new DataSet(); try { apt.Fill(ds); Console.WriteLine("transTods_success"); } catch (Exception ex) { Console.WriteLine("transTods_failed:" + ex.Message); } finally { conn.Close(); } DataTable dt = ds.Tables[0]; //int i = 0; //foreach(DataRow dr in ds.Tables[0].Rows) //{ // if(i>50) // { // ds.Tables[0].Rows.RemoveAt(i); // } // i++; //} int count = dt.Rows.Count; for(int i=0;i<count;i++) { if(i>50) { //dt.Rows.RemoveAt(51); dt.Rows[i].delete(); } } apt.update(ds); int j = 0; foreach (DataRow dr in ds.Tables[0].Rows) { Console.WriteLine(dr["Price"]+" "+j+" "+dr.RowState); j++; } } 關于數(shù)據(jù)操作在此多說一點,可以用sqldatareader進行讀取,插入修改數(shù)據(jù)等也可以采用insert等方法進行處理,在此采用dataset先把數(shù)據(jù)表緩存到本地表中進行操作,如果只需要。看需要自己選擇,采用dataset包括更新數(shù)據(jù)表等都很方便,只需要用sqldataadapter進行一下update就可以。 注意: 1、在對datatable進行遍歷并進行刪除操作時,不要用foreach,其不允許進行增加和刪除 2、如果數(shù)據(jù)表需要update,那么數(shù)據(jù)表進行增刪是要用add和delete,不要用import和remove,因為在進行update時,是根據(jù)datarow的rowstate屬性進行操作的。比如delete時,并不是刪除row,而是把相應行的rowstate進行了修改,update時就根據(jù)此屬性進行處理,本地數(shù)據(jù)表只有當采用acceptchange時才會根據(jù)rowstate屬性進行數(shù)據(jù)表的相應刪除。而采用import或者remove時則rowstate屬性則會存在問題,比如采用remove時,整行移除后相應的rowstate也不存在,而update時,由于相應的行沒有rowstate屬性值,所以遠程數(shù)據(jù)庫不會進行刪除。import倒入后rowstate狀態(tài)不明,所以也無法進行遠程數(shù)據(jù)庫的數(shù)據(jù)更新。 總之,采用update時并不是拿本地datatable與sqlserver數(shù)據(jù)表進行對比然后更新,而是根據(jù)datatable中的datarow的rowstate屬性直接修改sqlserver數(shù)據(jù)表。 該文章在 2022/7/5 0:50:36 編輯過 |
關鍵字查詢
相關文章
正在查詢... |