c#.net 是如何訪問 SQL Server 數(shù)據(jù)庫
目前創(chuàng)新互聯(lián)建站已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、青浦網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
1、導(dǎo)入命名空間
using System.Data.SqlClient; //連接SQLServer 數(shù)據(jù)庫專用
2、創(chuàng)建連接
SqlConnection lo_conn = New SqlConnection("Server= 3、打開連接,第2步并沒有真正連接數(shù)據(jù)庫 lo_conn.Open(); //真正與數(shù)據(jù)庫連接 4、向數(shù)據(jù)庫發(fā)送SQL命令要使用SqlCommand: SqlCommand lo_cmd = new SqlCommand(); //創(chuàng)建命令對(duì)象 lo_cmd.CommandText = "這里是SQL語句"; //寫SQL語句 lo_cmd.Connection = lo_con; //指定連接對(duì)象,即上面創(chuàng)建的 5、處理SQL命令或返回結(jié)果集 lo_cmd.ExecuteNonQuery(); //這個(gè)僅僅執(zhí)行SQL命令,不返回結(jié)果集,實(shí)用于建表、批量更新等不需要返回結(jié)果的操作。 SqlDataReader lo_reader = lo_cmd.ExecuteReader();//返回結(jié)果集 6、以數(shù)據(jù)集的方式反回結(jié)果集 SqlDataAdapter dbAdapter = new SqlDataAdapter(lo_cmd); //注意與上面的區(qū)分開 DataSet ds = new DataSet(); //創(chuàng)建數(shù)據(jù)集對(duì)象 dbAdapter.Fill(ds); //用返回的結(jié)果集填充數(shù)據(jù)集,這個(gè)數(shù)據(jù)集可以被能操作數(shù)據(jù)的控件DataBind 7、關(guān)閉連接 lo_conn.Close(); C#.NET操作數(shù)據(jù)庫通用類(MS SQL Server篇) 下面給出了一個(gè)C#操作MS SQL Server 數(shù)據(jù)庫的通用類,通過該類可以對(duì)數(shù)據(jù)庫進(jìn)行任何操作,包括執(zhí)行SQL語句、執(zhí)行存儲(chǔ)過程。以下是其詳細(xì)實(shí)現(xiàn)過程,希望大家共同修改優(yōu)化之。稍后將介紹如何使用它實(shí)現(xiàn)N層的程序設(shè)計(jì)。 配置web.config文件的鏈接參數(shù) C#代碼 using System; using System.Data; using System.Data.SqlClient; namespace Com.LXJ.Database { /// /// ConnDB 的摘要說明。 /// public class ConnDB { protected SqlConnection Connection; private string connectionString; /// /// 默認(rèn)構(gòu)造函數(shù) /// public ConnDB() { string connStr; connStr = System.Configuration.ConfigurationSettings.AppSettings["connStr"].ToString(); connectionString = connStr; Connection = new SqlConnection(connectionString); } /// /// 帶參數(shù)的構(gòu)造函數(shù) /// /// 數(shù)據(jù)庫聯(lián)接字符串 public ConnDB(string newConnectionString) { connectionString = newConnectionString; Connection = new SqlConnection(connectionString); } /// /// 完成SqlCommand對(duì)象的實(shí)例化 /// /// /// /// private SqlCommand BuildCommand(string storedProcName,IDataParameter[] parameters) { SqlCommand command = BuildQueryCommand(storedProcName,parameters); command.Parameters.Add(new SqlParameter("ReturnValue",SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null)); return command; } /// /// 創(chuàng)建新的SQL命令對(duì)象(存儲(chǔ)過程) /// /// /// /// private SqlCommand BuildQueryCommand(string storedProcName,IDataParameter[] parameters) { SqlCommand command = new SqlCommand(storedProcName,Connection); command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } return command; } /// /// 執(zhí)行存儲(chǔ)過程,無返回值 /// /// /// public void ExecuteProcedure(string storedProcName,IDataParameter[] parameters) { Connection.Open(); SqlCommand command; command=BuildQueryCommand(storedProcName,parameters); command.ExecuteNonQuery(); Connection.Close(); } /// /// 執(zhí)行存儲(chǔ)過程,返回執(zhí)行操作影響的行數(shù)目 /// /// /// /// /// public int RunProcedure(string storedProcName,IDataParameter[] parameters,out int rowsAffected) { int result; Connection.Open(); SqlCommand command = BuildCommand(storedProcName,parameters); rowsAffected = command.ExecuteNonQuery(); result = (int)command.Parameters["ReturnValue"].Value; Connection.Close(); C# 連接SQL數(shù)據(jù)庫、常用的連接字符串講解、常用的數(shù)據(jù)庫操作方法 2009-06-15 12:45:47 標(biāo)簽:數(shù)據(jù)庫 休閑 職場 using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; using System.Data; namespace My_Connection { class DbConn { private const string ConnString = "server=localhost;integrated security=sspi;database=pubs;"; //---------------------常用的連接字符串參數(shù)------------------------------------------------- //server=locahost或 . 登錄服務(wù)器地址這里是本地 //Data Source //Address //Addr //Network Address //integrated security=sspi或true 以Windows當(dāng)前身份登錄 //uid=sa; 登錄用戶名:sa //pwd=sa; 登錄密碼:sa //Connect Timeout=15 //設(shè)置連接等待時(shí)間,以秒為單位 //Trusted_Connection=True 設(shè)置信任連接 //Asynchronous Processing=true 設(shè)置異步訪問數(shù)據(jù)庫,默認(rèn)關(guān)閉 //MultipleActiveResultSets=True 在單個(gè)連接上得到和管理多個(gè)、僅向前引用和只讀的結(jié)果集(ADO.NET2.0,SQL 2005) //database=pubs 或 Initial Catalog=pubs 指定數(shù)據(jù)庫:pubs //Max Pool Size 最大連接數(shù) //Min Pool Size 最小連接數(shù) //Pooling 當(dāng)設(shè)置為true時(shí),SQL連接將從連接池獲得,如果沒有則新建并添加到連接池中,默認(rèn)是true.false則不設(shè)連接池 //Connection Lifetime 在連接池中應(yīng)用,指定一個(gè)連接處于close后的生存時(shí)間大于指定時(shí)間并屬于最小連接數(shù)以外的將自動(dòng)消毀 //Application Name 應(yīng)用程序名稱或者當(dāng)沒有提供應(yīng)用程序時(shí)為.Net SqlClient數(shù)據(jù)提供者 //Connection Reset true 當(dāng)連接從連接池移走時(shí)決定是否重置數(shù)據(jù)庫連接.當(dāng)設(shè)置為 false 時(shí)用于避免獲得連接時(shí)的額外服務(wù)器往復(fù)代價(jià) //Enlist true 為真時(shí),連接池自動(dòng)列出創(chuàng)建線程的當(dāng)前事務(wù)上下文中的連接 //Workstation ID 指定工作組的名稱 //Packet Size= 就是設(shè)置網(wǎng)絡(luò)數(shù)據(jù)包的大小值,默認(rèn)為8192 //Network Library 設(shè)置網(wǎng)絡(luò)連接協(xié)議 //當(dāng)通過SQLOLEDB提供者進(jìn)行連接時(shí)使用以下語法: //Network Library=dbmssocn //但通過MSDASQL提供者進(jìn)行連接時(shí)使用以下語法: //Network=dbmssocn //名稱 網(wǎng)絡(luò)協(xié)議庫 //dbnmpntw Win32 Named Pipes //dbmssocn Win32 Winsock TCP/IP //dbmsspxn Win32 SPX/IPX //dbmsvinn Win32 Banyan Vines //dbmsrpcn Win32 Multi-Protocol (Windows RPC) //------------------------連接字符串示例 ----------------------------------------------------------------------------- //通過IP地址連接,必需確保SQL服務(wù)器開啟1433端口和檢查SQL網(wǎng)絡(luò)連接啟用TCP/IP協(xié)議 //Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword; //默認(rèn)情況下, SQL服務(wù)器的微軟.NET框架數(shù)據(jù)提供者設(shè)置網(wǎng)絡(luò)包大小對(duì)8192個(gè)字節(jié). //然而這不一定是最好的,你可以根據(jù)你覺的合適的包大小設(shè)置包的大小 //Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;Packet Size=4096; //----------------------------------------------------------------------------------------------- //因?yàn)榭紤]到實(shí)現(xiàn)復(fù)雜業(yè)務(wù)邏輯時(shí),需要同進(jìn)使用GetDataReader、GetDataAdapter、GetTransaction等 //連接那里會(huì)變得麻煩,所以區(qū)分定義三種方式的連接對(duì)象 private SqlConnection SqlDrConn = new SqlConnection(ConnString); private SqlConnection SqlDaConn = new SqlConnection(ConnString); private SqlConnection SqlTrConn = new SqlConnection(ConnString); public DataTable GetDataReader(string StrSql)//數(shù)據(jù)查詢 { //當(dāng)連接處于打開狀態(tài)時(shí)關(guān)閉,然后再打開,避免有時(shí)候數(shù)據(jù)不能及時(shí)更新 if (SqlDrConn.State == ConnectionState.Open) { SqlDrConn.Close(); } try { SqlDrConn.Open(); SqlCommand SqlCmd = new SqlCommand(StrSql, SqlDrConn); SqlDataReader SqlDr = SqlCmd.ExecuteReader(); if (SqlDr.HasRows) { DataTable dt = new DataTable(); //---------------Method 1------------------- //for (int i = 0; i < SqlDr.FieldCount; i++) //{ // dt.Columns.Add(SqlDr.GetName(i), SqlDr.GetFieldType(i)); //} //while (SqlDr.Read()) //{ // DataRow dr= dt.NewRow(); // for (int i = 0; i < SqlDr.FieldCount; i++) // { // dr[i] = SqlDr[i]; // } // dt.Rows.Add(dr); //} //---------------Method 2------------------- //更為簡單 dt.Load(SqlDr); //關(guān)閉對(duì)象和連接 SqlDr.Close(); SqlDrConn.Close(); return dt; } return null; } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); return null; } finally { SqlDrConn.Close(); } } public SqlDataAdapter GetDataAdapter(string StrSql)//數(shù)據(jù)增刪修查 { if (SqlDaConn.State == ConnectionState.Open) { SqlDaConn.Close(); } try { SqlDaConn.Open(); SqlDataAdapter SqlDa = new SqlDataAdapter(StrSql, SqlDaConn); //提供自動(dòng)生成單表命令的一種方式 SqlCommandBuilder SqlCb = new SqlCommandBuilder(SqlDa); return SqlDa; } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); return null; } finally { SqlDaConn.Close(); } } //這里使用了ArrayList數(shù)組來存放SQL語句集 public bool GetTransaction(System.Collections.ArrayList StrSqlList)//實(shí)現(xiàn)事務(wù) { if (SqlTrConn.State == ConnectionState.Open) { SqlTrConn.Close(); } SqlTransaction SqlTr = null; try { SqlTrConn.Open(); SqlTr = SqlTrConn.BeginTransaction(); SqlCommand SqlCmd = new SqlCommand(); SqlCmd.Connection = SqlTrConn; SqlCmd.Transaction = SqlTr; //加載數(shù)組里的SQL語句 for (int i = 0; i < StrSqlList.Count; i++) { SqlCmd.CommandText = StrSqlList[i].ToString(); SqlCmd.ExecuteNonQuery(); } //提交所有事務(wù) SqlTr.Commit(); return true; } catch (Exception ex) { //一但出錯(cuò),回滾所有事務(wù),還原狀態(tài) if(SqlTr!=null) SqlTr.Rollback(); System.Windows.Forms.MessageBox.Show(ex.Message); return false; } finally { SqlTrConn.Close(); } } } } C#.NET常用數(shù)據(jù)庫操作(連接、增、刪、改)封裝 如果你經(jīng)常從事基于.NET的應(yīng)用程序的數(shù)據(jù)庫開發(fā),你會(huì)有這種感覺--總是覺得自己在反復(fù)編寫相同的數(shù)據(jù)訪問代碼。很多相似的代碼每天在復(fù)制來,粘貼去。你是否想過將數(shù)據(jù)訪問代碼包裝在一個(gè)Helper函數(shù)里,以便能夠在不同的類中共用?如果你還沒有這樣做,那么我這里就告訴你如何從復(fù)用的角度來設(shè)計(jì)和包裝一個(gè)我們自己的數(shù)據(jù)訪問類,從而減少冗余代碼,提高開發(fā)效率。(本節(jié)代碼位置:光盤\code\ch05\02) 當(dāng)我們執(zhí)行增加、更新、刪除命令的時(shí)候,一般會(huì)這樣來寫: 1. string conString = "data source=127.0.0.1;database=codematic;user id=sa; 2. password="; 3. SqlConnection myConnection = new SqlConnection(conString ); 4. string strSql = "update P_Product set Name='電腦3' where Id=52"; 5. SqlCommand myCommand = new SqlCommand(strSql, myConnection); 6. myConnection.Open(); 7. int rows = myCommand.ExecuteNonQuery(); 8. myConnection.Close(); 如果是很多個(gè)這樣的操作,那么我們就需要寫很多基本相似的代碼。根據(jù)面對(duì)對(duì)象的抽象原則,在這些操作里面有很多共性的東西,唯一的不同就是conString和strSql。那我是不是可以將共性的東西抽象出來將其封裝為所有操作所共用呢? 我們把共性的東西抽象出一個(gè)獨(dú)立方法: 1. // 2. //執(zhí)行SQL語句,返回影響的記錄數(shù) 3. // 4. public int ExecuteSql(string StrSql, string conString) 5. { 6. using (SqlConnection connection = new SqlConnection(conString)) 7. { 8. using (SqlCommand cmd = new SqlCommand(StrSql, connection)) 9. { 10. connection.Open(); 11. int rows = cmd.ExecuteNonQuery(); 12. return rows; 13. } 14. } 15.} 這樣,實(shí)際調(diào)用的代碼就可以變成: 1. string conString="data source=127.0.0.1;database=codematic;user id=sa; 2. password="; 3. string strSql = "update P_Product set Name='電腦3' where Id=52"; 4. int rows =ExecuteSql(strSql, conString); 是不是簡單了很多?可以讓其他類共用這個(gè)方法,重復(fù)代碼少了,工作效率提高了。 如果所連數(shù)據(jù)庫都是固定不變的,也就是說連接字符串一般不變,那么我們可以將conString 提取出來放到一個(gè)變量里面,所有的方法都用這個(gè)變量。想改變數(shù)據(jù)庫時(shí),直接修改變量的內(nèi)容即可,在實(shí)際調(diào)用的時(shí)候不需要傳連接字符串,是不是又省了一步?為了更好地復(fù)用,我們還可以將該方法放到單獨(dú)的類DbHelperSQL里面去。 DbHelperSQL類中: 1. public class DbHelperSQL 2. { 3. public static string conString = "data source=127.0.0.1; 4. database=codematic;user id=sa;password="; 5. // 6. //執(zhí)行SQL語句,返回影響的記錄數(shù) 7. // 8. //SQL語句 9. // 10. public static int ExecuteSql(string StrSql) 11. { 12. using (SqlConnection connection = new SqlConnection(conString)) 13. { 14. using (SqlCommand cmd = new SqlCommand(StrSql, connection)) 15. { 16. connection.Open(); 17. int rows = cmd.ExecuteNonQuery(); 18. return rows; 19. } 20. } 21. } 22.} 為了使用方便和節(jié)省資源,我們將變量和方法設(shè)計(jì)成靜態(tài)的。此時(shí)的調(diào)用就變成了: 1. string strSql = "update P_Product set Name='電腦3' where Id=52"; 2. int rows = DbHelperSQL.ExecuteSql(strSql); 為了以后的維護(hù)和擴(kuò)展,數(shù)據(jù)庫連接字符串最好放在Web.config里面,這樣以后想改數(shù)據(jù)庫就直接改一下Web.config即可,而無須重新編譯代碼。 1. Web.config加入: 2. 3. 5. 6. 變量獲取該字符串: 7. public static string conString = ConfigurationManager.AppSettings 8. ["ConnectionString "]; 有時(shí)候?yàn)榱税踩?,我們可能?huì)對(duì)Web.config中的連接字符串進(jìn)行加密。這樣就需要在獲取連接字符串的時(shí)候進(jìn)行解密。這樣,單憑上面一句代碼可能就無法解決了,我們還需要單獨(dú)的處理方法來處理。為了更好地降低耦合性,減少對(duì)類的依賴,我們可以將獲取數(shù)據(jù)庫連接字符串的操作單獨(dú)放到一個(gè)類里面,如PubConstant。這樣以后修改相應(yīng)的連接規(guī)則和加密處理時(shí),直接調(diào)用各個(gè)模塊的這個(gè)類就可以了,而并不需要知道實(shí)際的各個(gè)模塊的數(shù)據(jù)庫訪問類是怎么獲取的。 例如Web.config的 1. 2. 4. 公共常量類獲取并處理: 5. public class PubConstant 6. { 7. // 8. //獲取連接字符串,判斷是否加密處理 9. // 10. public static string ConString 11. { 12. get 13. { 14. string _conString = ConfigurationManager.AppSettings ["ConString"]; 15. string ConStringEncrypt = ConfigurationManager.AppSettings 16. ["ConStringEncrypt"]; 17. if (ConStringEncrypt == "true")//是加密的 18. { 19. _conString = DESEncrypt.Decrypt(_conString);//解密 20. } 21. return _conString; 22. } 23.} 24.} 25.使用連接字符串: 26.public static string conString = PubConstant.ConString; C#操作數(shù)據(jù)庫的常用公共方法! 分類: Winform項(xiàng)目心得體會(huì) 2012-09-03 18:46 285人閱讀 評(píng)論(0) 收藏 舉報(bào) 即便是一個(gè)小型的C#+數(shù)據(jù)庫的項(xiàng)目(本文以SQL SERVER為例,其他數(shù)據(jù)庫類似),也需要多種對(duì)數(shù)據(jù)庫的操作。有時(shí)候編代碼的時(shí)候,想到哪寫到哪確實(shí)可以實(shí)現(xiàn)具體的功能,但從整個(gè)框架體系上來看,代碼的冗余以及不規(guī)范,很有可能導(dǎo)致代碼運(yùn)行的效率,對(duì)后期擴(kuò)展項(xiàng)目的規(guī)模也是有弊而無利。以前我犯了很都這種錯(cuò)誤,以后堅(jiān)決不犯了。 好了,言歸正傳了。經(jīng)常操作數(shù)據(jù)庫的步驟無非就是連接數(shù)據(jù)庫,執(zhí)行SQL語句,顯示結(jié)果三個(gè)大步驟。而一般這三個(gè)步驟可以由兩個(gè)方面進(jìn)行(個(gè)人感覺是這樣):一個(gè)方法就是建立SqlDataAdapter用以填充數(shù)據(jù)集DataSet;另一個(gè)方法就是利用Commd對(duì)象執(zhí)行SQL語句,然后建立SqlDataReader。前者主要用于綁定顯示控件,后者則傾向于判斷某種條件??傊?,大體的操作流程就是這樣,當(dāng)我們進(jìn)行多次操作數(shù)據(jù)庫的時(shí)候,必然會(huì)有重復(fù)的代碼,那么建立公共方法就是很必要的了。 建立一個(gè)公共類,如下 [csharp] view plaincopyprint? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; namespace BaseClass { class BaseOperate { //連接數(shù)據(jù)庫 public SqlConnection getcon() { string M_str_sqlcon = "Server=.;DataBase=db_CRM;Trusted_Connection=SSPI"; SqlConnection myCon = new SqlConnection(M_str_sqlcon); return myCon; } //連接SqlConnection,執(zhí)行SQL public void getcom(string M_str_sqlstr) { SqlConnection sqlcon = this.getcon(); sqlcon.Open(); SqlCommand sqlcom = new SqlCommand(M_str_sqlstr, sqlcon); sqlcom.ExecuteNonQuery(); sqlcom.Dispose(); sqlcon.Close(); sqlcon.Dispose(); } //創(chuàng)建DataSet對(duì)象 public DataSet getds(string M_str_sqlstr, string M_str_table) { SqlConnection sqlcon = this.getcon(); SqlDataAdapter sqlda = new SqlDataAdapter(M_str_sqlstr, sqlcon); DataSet myds = new DataSet(); sqlda.Fill(myds, M_str_table); return myds; } //創(chuàng)建SqlDataReader對(duì)象 public SqlDataReader getread(string M_str_sqlstr) { SqlConnection sqlcon = this.getcon(); SqlCommand sqlcom = new SqlCommand(M_str_sqlstr, sqlcon); sqlcon.Open(); SqlDataReader sqlread = sqlcom.ExecuteReader(CommandBehavior.CloseConnection); return sqlread; } } } 將每一個(gè)步驟像如上一樣寫成公共方法,則就能隨意的在各個(gè)模塊進(jìn)行調(diào)用,這不僅使得代碼簡潔明了,也有助于旁人閱讀。另外,對(duì)變量的命名也需要有自己的命名規(guī)則,不然當(dāng)變量很都得時(shí)候就會(huì)搞混。 有了上面的鋪墊,可以按照上面的思路繼續(xù)考慮可能用到的公共方法,其中,控件(比如下拉框)的數(shù)據(jù)綁定,正則表達(dá)式的判定算是最常用的,乘勝追擊,立刻再寫一個(gè)公共類,添加如下公共方法: [csharp] view plaincopyprint? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; using System.Windows.Forms; using System.Text.RegularExpressions; namespace BaseClass { class OperateAndValidate { BaseOperate boperate = new BaseOperate();// 聲明BaseOperate類的一個(gè)對(duì)象,以調(diào)用其方法 //綁定COMBOBOX控件 public void cboxBind(string P_str_sqlstr, string P_str_table, string P_str_tbMember, ComboBox cbox) { DataSet myds = boperate.getds(P_str_sqlstr, P_str_table); cbox.DataSource = myds.Tables[P_str_table];//將數(shù)據(jù)集中的表綁定到下拉框上 cbox.DisplayMember = P_str_tbMember;//將表中的具體的列所對(duì)應(yīng)的值顯示在下拉框中 } //驗(yàn)證輸入的字符串為數(shù)字 public bool validateNum(string P_str_num) { return Regex.IsMatch(P_str_num, "^[0-9]*$"); } //驗(yàn)證輸入的字符串為電話號(hào)碼 public bool validatePhone(string P_str_phone) { return Regex.IsMatch(P_str_phone, @"\d{3,4}-\d{7,8}"); } //驗(yàn)證輸入的字符串為傳真號(hào)碼 public bool validateFax(string P_str_fax) { return Regex.IsMatch(P_str_fax, @"86-\d{2,3}-\d{7,8}"); } //驗(yàn)證輸入的字符串為郵編號(hào)碼 public bool validatePostCode(string P_str_postcode) { return Regex.IsMatch(P_str_postcode, @"\d{6}"); } #endregion //驗(yàn)證輸入的字符串為E-MAIL地址 public bool validateEmail(string P_str_email) { return Regex.IsMatch(P_str_email, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); } //驗(yàn)證輸入的字符串為網(wǎng)絡(luò)地址 public bool validateNAddress(string P_str_naddress) { return Regex.IsMatch(P_str_naddress, @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"); } //自動(dòng)編號(hào) /// /// 自動(dòng)編號(hào) /// /// SQL語句 /// 數(shù)據(jù)表 /// 數(shù)據(jù)表字段 /// 編號(hào)前的字符串 /// 編號(hào)后的數(shù)字 /// textBox控件名 public void autoNum(string P_str_sqlstr, string P_str_table, string P_str_tbColumn, string P_str_codeIndex, string P_str_codeNum, TextBox txt) { string P_str_Code = ""; int P_int_Code = 0; DataSet myds = boperate.getds(P_str_sqlstr, P_str_table); if (myds.Tables[0].Rows.Count == 0) { txt.Text = P_str_codeIndex + P_str_codeNum; } else { P_str_Code = Convert.ToString(myds.Tables[0].Rows[myds.Tables[0].Rows.Count - 1][P_str_tbColumn]);//獲取最后一行數(shù)據(jù)里的編號(hào)字段 P_int_Code = Convert.ToInt32(P_str_Code.Substring(1, 3)) + 1;//我的字段為"C101,C102....." P_str_Code = P_str_codeIndex + P_int_Code.ToString(); txt.Text = P_str_Code; } } } } 在自動(dòng)編號(hào)的公共方法里,提取字符串的格式各有不同,由于不知道有什么方法可以實(shí)現(xiàn)自增,只能用C101來進(jìn)行自增(要是設(shè)置為C001要的話,按照上述方法,第二個(gè)就是C2了),這方法也就將就著能用吧。
文章標(biāo)題:c#.net是如何訪問SQLServer數(shù)據(jù)庫
本文路徑:http://weahome.cn/article/igojso.html