人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

一份禮物: 自動填充SqlCommand.Parameters的類(1)

一份禮物: 自動填充SqlCommand.Parameters的類(1)

更新時間:2022-06-28 文章作者:未知 信息來源:網絡 閱讀次數:

//---------------------------------------------------
//日期: 2002.1.10
//作者: raxzhang
//版權: raxzhang
//環境: Microsoft Visual Studio.Net 7.0
//語言: Visual C#
//類型: 類文件,編譯后為.dll文件
//描述: 這是作為對數據操作的最常用的屬性和方法類。
// 是一個基礎類。可以被繼承和擴展。
//注意: 使用這個類的條件是-1.dbo用戶。2.存儲過程的
// 參數名與表的字段名相差一個@
//---------------------------------------------------
using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient; 

namespace zyq.DBMapping
{
/// <summary>
/// 對SQL server進行操作
/// </summary>
public class DataAccessSQL
{
#region class variables
private String connectionString;
private int _tablecount=-1;
private int _stroeprocedurecount=-1;
private SqlConnection conn=null;
#endregion
#region propertiesof class
/// <summary>
/// 屬性:數據庫存儲過程的個數(stat>0)
/// </summary>
public int StroeProcedureCount
{
get
{
if (this._stroeprocedurecount !=-1)
{
return this._stroeprocedurecount;
}
else
{
return this.GetStroeProcedures().Count;
}
}
}
/// <summary>
/// 屬性:數據庫用戶表的個數
/// </summary>
public int TablesCount
{
get
{
if(this._tablecount !=-1)
{
return this._tablecolscount;
}
else
{
return this.GetTables().Count;
}
 }

}
#endregion
#region structure of class
/// <summary>
/// 構造函數
/// </summary>
/// <param name="ConnectionString">數據庫連接字符串,string</param>
public DataAccessSQL(string ConnectionString)
{
this.connectionString=ConnectionString;
this.conn =new SqlConnection(this.connectionString);
}
#endregion
#region Methods of class
/// <summary>
/// 獲得數據庫的所有表對象
/// </summary>
/// <returns>System.Data.SqlClient.SqlDataReader</returns>
public Hashtable GetTables()
{
try
{
Hashtable sptable=new Hashtable();
//驗證連接
if(conn!=null && conn.State!=ConnectionState.Open)
{
conn.Open();
}
else
{
conn= new SqlConnection(this.connectionString);
conn.Open();
}
string Query = " select name, Id from sysobjectswhere (type='U') and (name <> 'dtproperties') order by name ";
//獲得指定數據庫中的所有用戶表的名稱和ID
SqlCommand comm= new SqlCommand(Query,conn);
SqlDataReader reader=comm.ExecuteReader(CommandBehavior.CloseConnection);
//錄制Hashtable
while(reader.Read())
{
sptable.Add(reader.GetInt32(1),reader.GetString(0));
}
this._tablecount =sptable.Count;
return sptable;
}
catch(SqlException se)
{
throw(se);
}
}
/// <summary>
/// 獲得數據庫的存儲過程的名稱及ID列表
/// </summary>
/// <returns>HasTable</returns>
public Hashtable GetStroeProcedures()
{
try
{
//驗證連接
if(conn!=null && conn.State!=ConnectionState.Closed)
{
conn.Open();
}
else
{
conn= new SqlConnection(this.connectionString);
conn.Open();
}
Hashtable sptable=new Hashtable();
string Query = " SELECT name, id FROM sysobjects WHERE (type = 'p') AND (status > 0) ";
//獲得指定數據庫中的所有用戶存儲過程的名稱和ID
SqlCommand comm= new SqlCommand(Query,conn);

SqlDataReader reader=comm.ExecuteReader(CommandBehavior.CloseConnection);
//錄制Hashtable
while(reader.Read())
{
sptable.Add(reader.GetInt32(1),reader.GetString(0));
}
this._stroeprocedurecount =sptable.Count;
return sptable;
}
catch(SqlException se)
{
throw(se);
}
catch(Exception e)
{
throw(e);
}
finally
{
if(conn.State==ConnectionState.Open )
conn.Close();
}
}
/// <summary>
///獲得數據庫的指定表的列對象定義
/// </summary>
/// <param name="spname">表名稱</param>
/// <returns>DataSet</returns>
public DataSet getTableColumns(string spname)
{

try
{
Int32 spid=-1; //指定表的ID號初始
//驗證連接
if(conn!=null && conn.State!=ConnectionState.Closed)
{
conn.Open();
}
else
{
conn= new SqlConnection(this.connectionString);
conn.Open();
}
//獲取指定表名的ID號
SqlCommand comm= new SqlCommand("SELECT id FROM dbo.sysobjects WHERE name = '"+spname,conn);
SqlDataReader reader=comm.ExecuteReader(CommandBehavior.CloseConnection);
while(reader.Read())
{
spid = reader.GetInt32(0);
}
reader.Close();
//驗證ID
if(spid==0 ||spid==-1)
throw new Exception ("StroedProcedure is not existed!");
//獲得表的列定義
return getTableColumns(spid);
}
catch(SqlException se)
{
throw(se);
}
finally
{
if(conn.State ==ConnectionState.Open)
conn.Close();
}

}
/// <summary>
/// 獲得數據庫的指定表的列對象定義的列數組
/// </summary>
/// <param name="spid">表名稱</param>
/// <returns>DataSet</returns>
public DataSet getTableColumns(Int32 spid)
{
try
{
DataSet myDataSet=new DataSet();
//驗證連接
if(conn!=null && conn.State!=ConnectionState.Closed)
{
conn.Open();
}
else
{
conn= new SqlConnection(this.connectionString);
conn.Open();
}
SqlDataAdapter comm= new SqlDataAdapter("SELECT dbo.syscolumns.name, dbo.systypes.name AS Type, dbo.syscolumns.length,dbo.syscolumns.isoutparam, dbo.syscolumns.isnullable FROM dbo.syscolumns INNER JOIN dbo.systypes ON dbo.syscolumns.xtype = dbo.systypes.xtype WHERE dbo.syscolumns.id ='"+spid+"'",conn);
//獲取指定表的列定義
comm.Fill(myDataSet,"dbo.systypes");
comm.Fill(myDataSet,"dbo.systypes");
/*this._tablecolscount=myDataSet.Tables[0].Rows.Count;
DataColumn[] dcols=new DataColumn[5];
dcols[0]=myDataSet.Tables["dbo.syscolumns"].Columns["name"];
dcols[1]=myDataSet.Tables["dbo.systypes"].Columns["Type"];
dcols[2]=myDataSet.Tables["dbo.syscolumns"].Columns["length"];
dcols[3]=myDataSet.Tables["dbo.syscolumns"].Columns["isoutparam"];
dcols[3]=myDataSet.Tables["dbo.syscolumns"].Columns["isnullable"];*/
return myDataSet;
}
catch(SqlException se)
{
throw(se);
}
finally
{
if(conn.State ==ConnectionState.Open)
{
conn.Close();
}
}
}
/// <summary>
/// 為傳入SqlCommand對象建立存儲過程的參數數組
/// </summary>
/// <remarks >參數只付值ParameterName,SqlDbType,IsNullable,Direction</remarks>
/// <param name="sqlcommand">SqlCommand</param>
/// <returns>SqlCommand</returns>
public SqlCommand getStroeProcedureParamsByName(SqlCommand sqlcommand)//, string spname)
{
try
{
Int32 spid=-1; //初始化存儲過程的ID
//驗證連接
if(conn!=null && conn.State!=ConnectionState.Open)
{
conn.Open();
}
else
{
conn= new SqlConnection(this.connectionString);
conn.Open();
}
//獲取存儲過程的名稱
string spname=sqlcommand.CommandText;
//獲取存儲過程的ID號
SqlCommand comm= new SqlCommand("SELECT id FROM dbo.sysobjects WHERE name = '"+spname+"'",conn);
SqlDataReader reader=comm.ExecuteReader(CommandBehavior.CloseConnection);
while(reader.Read())
{
spid = reader.GetInt32(0);
}
//驗證ID號
if(spid==0 ||spid==-1)
throw new Exception ("StroedProcedure is not existed!");
//創建參數數組
return getStroeProcedureParamsByID( sqlcommand ,spid);
}
catch(SqlException se)
{
throw(se);
}
finally
{
if(conn.State ==ConnectionState.Open)
{
conn.Close();
}
}
}
/// <summary>
///為傳入SqlCommand對象建立存儲過程的參數數組
/// </summary>
/// <remarks >參數只付值ParameterName,SqlDbType,IsNullable,Direction</remarks>
/// <param name="sqlcommand">SqlCommand</param>
/// <param name="spid">存儲過程ID</param>
/// <returns>SqlCommand</returns>
public SqlCommand getStroeProcedureParamsByID(SqlCommand sqlcommand, Int32 spid)
{
try
{
//獲取存儲過程相關表的isnullable定義
Hashtable dependtble=this.SPDependonTable(spid);
DataSet myDataSet=new DataSet();
//驗證連接
if(conn!=null && conn.State!=ConnectionState.Open)
{
conn.Open();
}
else
{
conn= new SqlConnection(this.connectionString);
conn.Open();
}
//獲取指定存儲過程的參數內容
SqlDataAdapter comm= new SqlDataAdapter("SELECT dbo.syscolumns.name, dbo.systypes.name AS Type, dbo.syscolumns.length,dbo.syscolumns.isoutparam FROM dbo.syscolumns INNER JOIN dbo.systypes ON dbo.syscolumns.xtype = dbo.systypes.xtype WHERE dbo.syscolumns.id ="+spid,conn);//, dbo.syscolumns.isnullable
comm.Fill(myDataSet,"dbo.syscolumns");
comm.Fill(myDataSet,"dbo.systypes");
int paramcount = myDataSet.Tables[0].Rows.Count;
for(int i=0;i<paramcount;i++)
{
//參數名稱
string pname=myDataSet.Tables["dbo.syscolumns"].Rows[i]["name"].ToString();//.ToString();
//參數的SqlDBType類型定義
SqlDbType ptp=this.getSqlDbType(myDataSet.Tables["dbo.systypes"].Rows[i]["Type"].ToString());
//參數的DBType類型定義
//DbType dtp=this.getDbType(myDataSet.Tables["dbo.systypes"].Rows[i]["Type"].ToString());
//參數的長度定義
int flength=Convert.ToInt32(myDataSet.Tables["dbo.syscolumns"].Rows[i]["length"]);
//創建一個參數
sqlcommand.Parameters.Add(pname,ptp,flength);
//定義參數可否為空值,由相關表的isnullable定義得到
sqlcommand.Parameters[pname].IsNullable =(Boolean)dependtble[pname];
//sqlcommand.Parameters[pname].DbType =dtp;
//定義參數的INPUT和OUTPUT
if((int)(myDataSet.Tables["dbo.syscolumns"].Rows[i]["isoutparam"])==1)
{
sqlcommand.Parameters[pname].Direction =ParameterDirection.Output;
}
else
{
sqlcommand.Parameters[pname].Direction =ParameterDirection.Input;
}
}
this._spparamcount=paramcount;
return sqlcommand;
}
catch(SqlException se)
{
throw(se);
}
finally
{
if(conn.State ==ConnectionState.Open)
{
conn.Close();
}

}
}

 

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 嘉祥县| 岱山县| 仁寿县| 金川县| 桦川县| 浠水县| 新疆| 丰顺县| 冕宁县| 吉安市| 诸城市| 板桥市| 定安县| 星子县| 绥芬河市| 大冶市| 昌江| 南康市| 高雄县| 沂源县| 门源| 页游| 建宁县| 徐水县| 新巴尔虎左旗| 天峻县| 儋州市| 万荣县| 定兴县| 开封县| 沈阳市| 宜州市| 江西省| 乌拉特前旗| 东台市| 耿马| 永安市| 贵南县| 乐安县| 邢台县| 久治县|