一、數據庫連接字符串
private readonly static string connectionString = ConfigurationManager.ConnectionStrings["MyConnection"].ToString(); //web.config中配置連接語句
二、ExecuteNonQuery:執行增,刪,改的方法,支持存儲過程
-
/// 連接字符串,自滿足,請用SqlHelper.connString賦值
-
/// 參數1:命令類型,如果是sql語句,則爲CommandType.Text,否則爲 CommandType.StoredProcdure
-
/// 參數2:SQL語句或者存儲過程名稱
-
/// 參數3:SQL參數,如果沒有參數,則爲null
-
/// 返回:受影響的行數
-
public static int ExecuteNonQuery(CommandType commandType, string cmdText, params SqlParameter[] para)
-
{
-
using (SqlConnection conn = new SqlConnection(connectionString))
-
{
-
SqlCommand cmd = new SqlCommand();
-
cmd.Connection = conn;
-
cmd.CommandType = commandType;
-
cmd.CommandText = cmdText;
-
if (para != null)
-
{
-
cmd.Parameters.AddRange(para);
-
}
-
conn.Open();
-
return Convert.ToInt32(cmd.ExecuteNonQuery());
-
}
-
}
注:1、ExecuteNonQuery()執行命令對象的SQL語句,返回一個int 類型的變量,返回數據庫操作之後影響的行數。適合用來驗證對數據庫進行增刪改的情況。 2、ExecuteScalar()也返回一個int型變量。如果SQL語句是Select查詢,則僅僅返回查詢結果集中第一行第一列,而忽略其他行和列。如果SQL語句不是Select查詢,則這個返回結果沒任何作用。(建議查詢數據庫時使用)。由於不知道SQL語句到底是什麼樣的結構(有可能是int,有可能是Char等其它,)所以ExecuteScalar()方法返回一個最基本的類型Object,這個類型是所有類型的基類,可以轉換爲任意類型,所以用前需強制轉換。
三、GetScalar:執行查詢的方法,支持存儲過程
/// 參數1:命令類型,如果是sql語句,則爲CommandType.Text,否則爲 CommandType.StoredProcdure
/// 參數2:SQL語句或者存儲過程名稱
/// 參數3:SQL參數,如果沒有參數,則爲null
/// 返回:查詢結果的第一行第一列
-
<pre name="code" class="html"> public static object GetScalar(CommandType commandType, string cmdText, params SqlParameter[] para)
-
{
-
object result = null;
-
using (SqlConnection conn = new SqlConnection(connectionString))
-
{
-
SqlCommand cmd = new SqlCommand();
-
cmd.Connection = conn;
-
cmd.CommandType = commandType;
-
cmd.CommandText = cmdText;
-
if (para != null)
-
{
-
cmd.Parameters.AddRange(para);
-
}
-
conn.Open();
-
result = cmd.ExecuteScalar();
-
}
-
return result;
-
}
-
}
四、ExecuteReader:執行查詢的方法,支持存儲過程 /// 參數1:命令類型,如果是sql語句,則爲CommandType.Text,否則爲 CommandType.StoredProcdure /// 參數2:SQL語句或者存儲過程名稱 /// 參數3:SQL參數,如果沒有參數,則爲null /// 返回:讀取器SqlDataReader
-
<pre name="code" class="html"> public static SqlDataReader ExecuteReader(CommandType commandType, string cmdText, params SqlParameter[] para)
-
{
-
SqlConnection conn = new SqlConnection(connectionString);
-
SqlDataReader dr = null;
-
SqlCommand cmd = new SqlCommand();
-
cmd.Connection = conn;
-
cmd.CommandType = commandType;
-
cmd.CommandText = cmdText;
-
if (para != null)
-
{
-
cmd.Parameters.AddRange(para);
-
}
-
conn.Open();
-
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
-
return dr;
注:1、ExecuteReader方法存在的目的:儘可能快的對數據庫進行查詢並得到結果 2、ExecuteReader 返回一個DataReader對象,如果在SqlCommand對象中調用,則返回SqlDataReader;如果在OledbCommand對象中調用,返回的是OledbDataReader,可以調用DataReader的方法和屬性迭代處理結果集。五、GetDataSet:執行查詢的方法,支持存儲過程
/// 參數1:命令類型,如果是sql語句,則爲CommandType.Text,否則爲CommandType.StoredProcdure /// 參數2:SQL語句或者存儲過程名稱 /// 參數3:SQL參數,如果沒有參數,則爲null /// 返回:數據集
-
public static DataSet GetDataSet(CommandType commandType, string cmdText, params SqlParameter[] para)
-
{
-
using (SqlConnection conn = new SqlConnection(connectionString))
-
{
-
SqlDataAdapter da = new SqlDataAdapter();
-
da.SelectCommand = new SqlCommand();
-
da.SelectCommand.Connection = conn;
-
da.SelectCommand.CommandText = cmdText;
-
da.SelectCommand.CommandType = commandType;
-
if (para != null)
-
{
-
da.SelectCommand.Parameters.AddRange(para);
-
}
-
DataSet ds = new DataSet();
-
conn.Open();
-
da.Fill(ds);
-
return ds;
-
}
-
}
六、SqlDataReader與SqlDataAdapter+DataSet的區別1、SqlDataReader //基於連接,只讀訪問,適合數據量較小。(連接模式) SqlDataAdapter //基於非連接,適於數據量較大時,可以另行修改,最後再把修改結果返回給數據庫。要求資源也大一點 (斷開模式)2、SqlDataAdapter 讀取數據後將數據集放入DataSet,DataSet 的數據存在本地客服機內存。3、SqlDataReader返回的是一個數據讀寫器,只能一條條的讀,操作起來不靈活,一般在只讀的時候纔用到。 SqlDataAdapter返回的是數據集或者表,可以對其中的數據作任意操作4、寫法上不同: (1)SqlDatReader執行前須先打開數據庫,然後鬚生成一個command對象。再由command.ExecuteReader()方法賦值。完成後須手動關閉聯接。
-
SqlCommand cmd = new SqlCommand("select * from stu", conn);
-
conn.Open();
-
SqlDataReader rdr = cmd.ExecuteReader();
-
..................
-
conn.close();
(2)SqlDataAdapter 執行時,自動打開數據庫,且不用Command的ExecuteReader方法進行賦值,完成後自動斷開聯接。
-
SqlDataAdapter adptr = new SqlDataAdapter(sql, conn);
-
DataSet ds = new DataSet();
-
adptr.Fill(ds, "stu");<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
七、實例:
1、運用SqlDataReader 讀取數據
-
class DataReader
-
{
-
static void Main()
-
{
-
string str = "server=localhost;uid=sa;pwd=123;database=northwind";
-
SqlConnection conn = new SqlConnection(str);
-
SqlCommand cmd = new SqlCommand("select * from stu", conn);
-
conn.Open();
-
SqlDataReader rdr = cmd.ExecuteReader();
-
DataTable table=new Datable();
-
table.Load(rdr);
-
rdr.Close();
-
conn.Close();
-
}
-
}
2、運用SqlDataAdapter +DataSet 讀取修改數據
-
class SqlDataAdapter
-
{
-
static void Main()
-
{
-
string str = "server=localhost;uid=sa;pwd=123;database=northwind";
-
SqlConnection conn = new SqlConnection(str);
-
string sql = "select * from stu";
-
SqlDataAdapter adptr = new SqlDataAdapter(sql, conn);//Adepter對象
-
DataSet ds = new DataSet();//DataSet對象
-
adptr.Fill(ds, "stu");//填充DataSet 併爲當前表命名
-
DataTableReader rdr = ds.CreateDataReader();
-
while (rdr.Read())//讀取表中數據
-
{
-
for (int i = 0; i < rdr.FieldCount; i++)
-
{
-
Console.Write(rdr.GetName(i) + "\t" + rdr.GetValue(i) + "\t");
-
}
-
Console.WriteLine();
-
}
-
}
-
}
八、DataTable的使用
http://holysonll.blog.163.com/blog/static/214139093201352011491680/
-
/// <summary>
-
/// 獲取車輛數據:車輛數和運力
-
/// </summary>
-
/// <returns></returns>
-
public IList<RoadTransData> GetVehicleData()
-
{
-
StringBuilder sb = new StringBuilder();
-
sb.Append(" select 'data1_Pass' as dataTitle, COUNT(*) as vehicleNum ,SUM(PassengerSeats) as apprLoadMass ");
-
sb.Append(" from RT_VehiclePassenger A, RT_Vehicle V ");
-
sb.Append(" where A.VehicleId = V.VehicleId and V.CertState =1 ");
-
sb.Append(" UNION ");
-
sb.Append(" select 'data2_Goods' as dataTitle, COUNT(*) as vehicleNum ,SUM(A.ApprLoadMass) as apprLoadMass ");
-
sb.Append(" from RT_VehicleGoods A, RT_Vehicle V ");
-
sb.Append(" where A.VehicleId = V.VehicleId and V.CertState =1 ");
-
-
CommonService cs = new CommonService();
-
DataTable dt = cs.GetDataTableBySQL(sb.ToString());
-
-
IList<RoadTransData> lstRoadTransData = new List<RoadTransData>();
-
-
for (int i = 0; i < dt.Rows.Count; i++)
-
{
-
RoadTransData objRoadTransData = new RoadTransData();
-
objRoadTransData.RptName = dt.Rows[i][0].ToString();
-
objRoadTransData.Data1 = dt.Rows[i][1] == null ? 0 : Convert.ToDouble(dt.Rows[i][1].ToString());
-
objRoadTransData.Data2 = dt.Rows[i][2] == null ? 0 : Convert.ToDouble(dt.Rows[i][2].ToString());
-
lstRoadTransData.Add(objRoadTransData);
-
}
-
-
return lstRoadTransData;
-
}