国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

dotnet代碼自動生成機的完成

dotnet代碼自動生成機的完成

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

在我們寫程序的時候,特別是數據庫應用程序的時候,經常會遇到這樣的情況:對于一個給定的表,寫出這個表對應的類(用一句時髦的話說是實現業務實體類),類的數據成員是所有的字段,并且類含有該表的添加修改刪除等操作。還有,對于一個給定的存儲過程,要完成根據存儲過程存取數據或別的數據庫操作。如下代碼就是我們通常要完成的:
1.表的業務實體化
private int iId ;
public int Id
{
get
{
return iId ;
}
set
{
iId = value ;
}
}


private string strName ;
public string Name
{
get
{
return strName ;
}
set
{
strName = value ;
}
}


private string strCode ;
public string Code
{
get
{
return strCode ;
}
set
{
strCode = value ;
}
}


private string strDescription ;
public string Description
{
get
{
return strDescription ;
}
set
{
strDescription = value ;
}
}


private int iFatherid ;
public int Fatherid
{
get
{
return iFatherid ;
}
set
{
iFatherid = value ;
}
}


private int iType ;
public int Type
{
get
{
return iType ;
}
set
{
iType = value ;
}
}


private int iUserId ;
public int UserId
{
get
{
return iUserId ;
}
set
{
iUserId = value ;
}
}


ublic bool Add()
{
SqlConnection conn = SqlConn.Instance().Connection ;

string strSql = "insert into book(id, Name, Code, Description, Fatherid, Type, UserId)"
+"values(@id, @Name, @Code, @Description, @Fatherid, @Type, @UserId)" ;

SqlCommand command = new SqlCommand(strSql,conn) ;

command.Parameters.Add("@id",SqlDbType.Int ) ;
command.Parameters["@id"].value = iId ;

command.Parameters.Add("@Name",SqlDbType.NVarChar ,50) ;
if (strName!= null )
command.Parameters["@Name"].value = strName ;
else
command.Parameters["@Name"].value = DBNull.value ;

command.Parameters.Add("@Code",SqlDbType.NVarChar ,255) ;
if (strCode!= null )
command.Parameters["@Code"].value = strCode ;
else
command.Parameters["@Code"].value = DBNull.value ;

command.Parameters.Add("@Description",SqlDbType.NVarChar ,255) ;
if (strDescription!= null )
command.Parameters["@Description"].value = strDescription ;
else
command.Parameters["@Description"].value = DBNull.value ;

command.Parameters.Add("@Fatherid",SqlDbType.Int ) ;
command.Parameters["@Fatherid"].value = iFatherid ;

command.Parameters.Add("@Type",SqlDbType.Int ) ;
command.Parameters["@Type"].value = iType ;

command.Parameters.Add("@UserId",SqlDbType.Int ) ;
command.Parameters["@UserId"].value = iUserId ;

try
{
conn.Open() ;
command.ExecuteNonQuery() ;
return true ;
}
catch(Exception e)
{
throw(new Exception("Error in the Database"+e.Message)) ;
}
finally
{
conn.Close() ;
}
}
public bool Modify()
{
SqlConnection conn = SqlConn.Instance().Connection ;
string strSql ="update book set id = @id, Name = @Name, Code = @Code, Description = @Description, Fatherid = @Fatherid, Type = @Type, UserId = @UserId "
+ " where id =@id " ;
SqlCommand command = new SqlCommand(strSql,conn) ;
command.Parameters.Add("@id",SqlDbType.Int ) ;
command.Parameters["@id"].value = iId ;

command.Parameters.Add("@Name",SqlDbType.NVarChar ,50) ;
command.Parameters["@Name"].value = strName ;

command.Parameters.Add("@Code",SqlDbType.NVarChar ,255) ;
command.Parameters["@Code"].value = strCode ;

command.Parameters.Add("@Description",SqlDbType.NVarChar ,255) ;
command.Parameters["@Description"].value = strDescription ;

command.Parameters.Add("@Fatherid",SqlDbType.Int ) ;
command.Parameters["@Fatherid"].value = iFatherid ;

command.Parameters.Add("@Type",SqlDbType.Int ) ;
command.Parameters["@Type"].value = iType ;

command.Parameters.Add("@UserId",SqlDbType.Int ) ;
command.Parameters["@UserId"].value = iUserId ;

try
{
conn.Open() ;
command.ExecuteNonQuery() ;
return true ;
}
catch(Exception e)
{
throw(new Exception("Error in the Database"+e.Message)) ;
}
finally
{
conn.Close() ;
}
}

再看一下存儲過程:
public bool ExeSP_ddms_Modify_Trx(
int aiPrsn_trx_no,
int aiUlt_incid_no,
int aiPrsn_trx_status_cd,
DateTime adtTrx_cmpl_dt,
string astrEmail_addr)
{
SqlConnection conn = SqlConn.Instance().Connection ;

string strSPName = "ddms_Modify_Trx" ;
SqlCommand command = new SqlCommand(strSPName,conn) ;
command.CommandType = CommandType.StoredProcedure ;

command.Parameters.Add("@prsn_trx_no",SqlDbType.SmallInt ) ;
command.Parameters["@prsn_trx_no"].value= aiPrsn_trx_no ;

command.Parameters.Add("@ult_incid_no",SqlDbType.Int ) ;
command.Parameters["@ult_incid_no"].value= aiUlt_incid_no ;

command.Parameters.Add("@prsn_trx_status_cd",SqlDbType.Int ) ;
command.Parameters["@prsn_trx_status_cd"].value= aiPrsn_trx_status_cd ;

command.Parameters.Add("@trx_cmpl_dt",SqlDbType.DateTime ) ;
if ( adtTrx_cmpl_dt!= DateTime.Minvalue )
command.Parameters["@trx_cmpl_dt"].value= adtTrx_cmpl_dt ;
else
command.Parameters["@trx_cmpl_dt"].value= DBNull.value ;

command.Parameters.Add("@email_addr",SqlDbType.VarChar ,70) ;
if ( astrEmail_addr!= null )
command.Parameters["@email_addr"].value= astrEmail_addr ;
else
command.Parameters["@email_addr"].value= DBNull.value ;

try
{
conn.Open() ;
command.ExecuteNonQuery() ;
return true ;
}
catch(Exception e)
{
throw(new Exception("Error in the Database"+e.Message)) ;
}
finally
{
conn.Close() ;
}
}

上面處理表的代碼也挺長的,但那只是7個字段,如果一個表含有二三十個字段的話,恐怕代碼更長,同樣,檢查你寫好的代碼是否有錯誤也是一個痛苦的過程。
但是,寫這些代碼本身并沒有多少難度,而且很多工作都是重復的,這就不能不啟發我們通過一個程序來完成這些繁瑣易出錯的工作。
假如讓我們來設計一個程序完成上面的代碼,我們應該怎么做哪?

要完成上面的工作,我們首先應該找到我們要處理的表或存儲過程。
我們也可以通過編程實現:
1.列出所有的數據庫服務器
public static ArrayList GetServerList()
{
ArrayList alServers = new ArrayList() ;
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass() ;
try
{
SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers() ;
for(int i = 1;i<= serverList.Count;i++)
{
alServers.Add(serverList.Item(i)) ;
}
}
catch(Exception e)
{
throw(new Exception("取數據庫服務器列表出錯:"+e.Message)) ;
}
finally
{
sqlApp.Quit() ;
}
return alServers ;
}
這樣,所有的數據庫服務器迷宮凝成都存在了ArrayList里,我們可以用一個下拉列表來列出所有的服務器,讓用戶選擇他需要的一個。
2。得到選定服務器所有的數據庫列表
要完成這個工作,我們需要用戶輸入這個數據庫服務器的用戶名和密碼,代碼如下:
public static ArrayList GetDbList(string strServerName,string strUserName,string strPwd)
{
ArrayList alDbs = new ArrayList() ;
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass() ;
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;
try
{
svr.Connect(strServerName,strUserName,strPwd) ;
foreach(SQLDMO.Database db in svr.Databases)
{
if(db.Name!=null)
alDbs.Add(db.Name) ;
}
}
catch(Exception e)
{
throw(new Exception("連接數據庫出錯:"+e.Message)) ;
}
finally
{
svr.DisConnect() ;
sqlApp.Quit() ;
}
return alDbs ;
}
這樣就得到了數據庫的列表,你同樣可以讓用戶選擇一個數據庫。
3。列出選定數據庫所有的用戶表和存儲過程
在這一步我們不用SQLDMO了,我們通過讀取選定數據庫的sysobjects表中的記錄實現,當然,完成這個工作需要如下信息:你選擇的數據庫服務器名,用戶名,密碼,數據庫名等信息:
public static ArrayList GetTableList(string strServerName,string strDBName,string strUserName,string strPwd)
{
string strConStr = " data source="+ strServerName +";initial catalog="+strDBName +
";password="+ strPwd+";persist security info=True;user id="+ strUserName;
SqlConnection conn = new SqlConnection(strConStr) ;

ArrayList alTbs = new ArrayList() ;

string strSql = "select * from sysobjects where (xtype='u' or xtype='p') and category<>2 order by name" ;
SqlCommand comm = new SqlCommand(strSql,conn) ;

SqlDataReader sr = null ;
try
{
conn.Open() ;
sr = comm.ExecuteReader() ;
while(sr.Read())
{
string strName = sr["name"].ToString() ;
bool blTable = sr["xtype"].ToString().Trim().ToUpper() == "U"?true:false ;
TableInfo tb = new TableInfo(strName,blTable) ;
alTbs.Add(tb) ;
}

}
catch(Exception err)
{
throw(new Exception("取表明列表出錯:"+err.Message)) ;
}
finally
{
if (sr != null)
{
sr.Close() ;
sr = null ;
}
conn.Close() ;
}
return alTbs ;
}
這樣我們就得到了所有的用戶表和存儲過程,注意這一句:
select * from sysobjects where (xtype='u' or xtype='p') and category<>2 order by name,這是關鍵的sql語句,其中xtype='u' 表示用戶表,xtype='p'表示存儲過程,category<>2表示不是系統存儲過程。


下一步是取得選定表的所有字段或存儲過程的所有參數
我們從表syscolumns取得我們想要到的東西:
strTableName = tbInfo.Name ;
string strSql = "select * from syscolumns where id=( " +
" select id from sysobjects where name='"+ strTableName + "')" ;

SqlDataAdapter sa = new SqlDataAdapter(strSql,conn) ;
DataSet ds = new DataSet() ;
sa.Fill(ds) ;
這樣我們就把某個表(或存儲過程)的所有字段信息放到了結果集ds里。
在syscolumns 里有一個字段xtype,該字段表示列的數據類型,俺定義了兩個函數,能根據xtype的值得到對應的dotnet中的數據類型和sqldb數據類型:
private string getType(int iType)
{
string strResult = "" ;
switch(iType)
{
case 34:
strResult = "Byte[]" ;
break ;
case 35:
case 99:
case 167:
case 175:
case 231:
case 239:
strResult = "string" ;
break ;
case 48:
case 52:
case 56:
case 127:
strResult = "int" ;
break ;
case 58:
case 61:
strResult = "DateTime" ;
break ;
case 59:
strResult = "Single" ;
break ;
case 60:
case 106:
case 108:
case 122:
strResult = "Decimal" ;
break ;
case 62:
strResult = "Double" ;
break ;
case 104:
strResult = "bool" ;
break ;
default:
strResult = "None" ;//"unknow" ;
break ;
}
return strResult + " " ;
}

private string getSqlDBType(int iType)
{
string strResult = "" ;
switch(iType)
{
case 34:
strResult = "SqlDbType.Image" ;
break ;
case 35:
strResult = "SqlDbType.Text" ;
break ;
case 48:
strResult = "SqlDbType.TinyInt" ;
break ;
case 52:
strResult = "SqlDbType.SmallInt" ;
break ;
case 56:
strResult = "SqlDbType.Int" ;
break ;
case 58:
strResult = "SqlDbType.SmallDateTime" ;
break ;
case 59:
strResult = "SqlDbType.Real" ;
break ;
case 60:
strResult = "SqlDbType.Money" ;
break ;
case 61:
strResult = "SqlDbType.DateTime" ;
break ;
case 62:
strResult = "SqlDbType.Float" ;
break ;
case 99:
strResult = "SqlDbType.NText" ;
break ;
case 104:
strResult = "SqlDbType.Bit" ;
break ;
case 106:
strResult = "SqlDbType.Decimal" ;
break ;
case 108:
strResult = "SqlDbType.Decimal" ;
break ;
case 122:
strResult = "SqlDbType.SmallMoney" ;
break ;
case 127:
strResult = "SqlDbType.BigInt" ;
break ;
case 165:
strResult = "SqlDbType.VarBinary" ;
break ;
case 167:
strResult = "SqlDbType.VarChar" ;
break ;
case 173:
strResult = "SqlDbType.Binary" ;
break ;
case 175:
strResult = "SqlDbType.Char" ;
break ;
case 189:
strResult = "SqlDbType.Timestamp" ;
break ;
case 231:
strResult = "SqlDbType.NVarChar" ;
break ;
case 239:
strResult = "SqlDbType.NChar" ;
break ;
default:
strResult = "None" ;//"unknow" ;
break ;
}
return strResult + " " ;
}
當然,還有一個函數先介紹一下,后面有它的具體用法:
private string getTypeShort(int iType)
{
string strResult = "" ;
switch(getType(iType).Trim())
{
case "Byte[]":
strResult = "img" ;
break ;
case "string":
strResult = "str" ;
break ;
case "int":
strResult = "i" ;
break ;
case "DateTime":
strResult = "dt" ;
break ;
case "Single":
strResult = "sig" ;
break ;
case "Decimal":
strResult = "dec" ;
break ;
case "Double":
strResult = "db" ;
break ;
case "bool":
strResult = "bl" ;
break ;
default:
strResult = "unknow" ;
break ;
}
return strResult ;
}

現在有了上面的介紹和函數基礎,我們可以逐步實現我們的目標了:
1.生成數據實體類的數據成員
大家看一下,對于一個字段id,整形,我們這樣定義:
private int iId ;
public int Id
{
get
{
return iId ;
}
set
{
iId = value ;
}
}
其中iId表示數據類型+字段名稱,其中字段名稱的第一個字母大寫,代碼實現如下:
private string BuildMember(DataSet ds)
{
StringBuilder sb = new StringBuilder() ;
foreach(DataRow dr in ds.Tables[0].Rows)
{
int iType = (byte)dr["xtype"] ;
string strType = getType(iType) ;
string strName = dr["name"].ToString() ;
strName = UpFirstChar(strName) ;
string strShortType = getTypeShort(iType) ;
string strPrivateline = "private " + strType + strShortType +strName +" ;\r\n" ;
sb.Append(strPrivateline) ;
string strPublicline = "public " + strType + strName +" \r\n" ;
sb.Append(strPublicline) ;
sb.Append("{\r\n") ;
sb.Append("\tget\r\n") ;
sb.Append("\t{\r\n") ;
sb.Append("\t\treturn " +strShortType +strName+ " ;\r\n") ;
sb.Append("\t}\r\n") ;
sb.Append("\tset\r\n") ;
sb.Append("\t{\r\n") ;
sb.Append("\t\t" +strShortType +strName+ " = value ;\r\n") ;
sb.Append("\t}\r\n") ;
sb.Append("}\r\n") ;
sb.Append("\r\n") ;
sb.Append("\r\n") ;
}
return sb.ToString();
}

參數DataSet ds中的ds是通過上一頁的sa.Fill(ds)得到的,dr["name"]表示字段名稱,dr["xtype"] 是字段類型。
UpFirstChar函數負責把字符串的第一個字母大寫:
private string UpFirstChar(string strvalue)
{
return strvalue.Substring(0,1).ToUpper() + strvalue.Substring(1,strvalue.Length - 1) ;
}
這樣就生成了數據實體的數據成員。
2。生成Add方法
Add方法生成起來有點難度,可以參考第一頁的程序,我們這里是通過參數的方法來實現add的。有一點要注意,就是在對參數賦值時要考慮參數值為空的情況。代碼實現如下:
private string BuildAddFunction(DataSet ds)
{
StringBuilder sb = new StringBuilder() ;

sb.Append("public bool Add()\r\n") ;
sb.Append("{\r\n") ;
sb.Append("\tSqlConnection conn = SqlConn.Instance().Connection ;\r\n") ;
sb.Append("\r\n") ;
string strInsert = "\"insert into " + strTableName + "(";
string strFiledList = "" ;
string strParamList = "" ;
foreach(DataRow dr in ds.Tables[0].Rows)
{
string strName = dr["name"].ToString() ;
strFiledList = strFiledList + strName + ", " ;
strParamList = strParamList + "@" + strName + ", " ;
}
strFiledList = strFiledList.Trim().TrimEnd(',') ;
strParamList = strParamList.Trim().TrimEnd(',') ;
sb.Append("\tstring strSql = " + strInsert + strFiledList+ ")\"\r\n") ;
sb.Append("\t+\"values(" + strParamList+ ")\" ;\r\n") ;
sb.Append("\r\n") ;
sb.Append("\tSqlCommand command = new SqlCommand(strSql,conn) ;\r\n") ;
sb.Append("\r\n") ;
foreach(DataRow dr in ds.Tables[0].Rows)
{
string strName = dr["name"].ToString() ;
string strSqlType = getSqlDBType((byte)dr["xtype"]) ;
string strShortType = getTypeShort((byte)dr["xtype"]) ;
string strvalueName = strShortType + UpFirstChar(strName) ;
int iLen = (Int16)dr["prec"] ;

string strLen = "" ;
if (strShortType == "str")
strLen = strLen + "," + iLen ;
string strCommandName = "\tcommand.Parameters.Add(\"@" + strName + "\"," + strSqlType + strLen+ ") ;\r\n" ;

string strCommandvalue = "\tcommand.Parameters[\"@" + strName + "\"].value = " + strvalueName + " ;\r\n" ;
string strCommandNullvalue = "\tcommand.Parameters[\"@" + strName + "\"].value = DBNull.value ;\r\n" ;

sb.Append(strCommandName) ;
if (strShortType == "dt")
sb.Append("\tif (" + strvalueName + "!= DateTime.Minvalue )\r\n") ;
else if (strShortType == "str")
sb.Append("\tif (" + strvalueName + "!= null )\r\n") ;
else if (strShortType == "img")
sb.Append("\tif (" + strvalueName + "!= null )\r\n") ;
else
sb.Append("") ;
sb.Append(strCommandvalue) ;
if (strShortType == "dt" ||strShortType == "str"||strShortType == "img")
{
sb.Append("\telse\r\n") ;
sb.Append(strCommandNullvalue) ;
}
sb.Append("\r\n") ;
}

sb.Append(AddCatchString()) ;

sb.Append("}\r\n") ;
return sb.ToString();
}


3。edit,delete的實現方法類似與add,就不詳細說了,edit方法代碼如下:
private string BuildModifyFunction(DataSet ds)
{
StringBuilder sb = new StringBuilder() ;

sb.Append("public bool Modify()\r\n") ;
sb.Append("{\r\n") ;
sb.Append("\tSqlConnection conn = SqlConn.Instance().Connection ;\r\n") ;
string strModify = "string strSql =\"update " + strTableName + " set ";

string strParamList = "" ;
foreach(DataRow dr in ds.Tables[0].Rows)
{
string strName = dr["name"].ToString() ;
strParamList = strParamList + strName + " = @" + strName + ", " ;
}
strParamList = strParamList.Trim().TrimEnd(',') ;
sb.Append("\t" + strModify + strParamList + " \"\r\n") ;
sb.Append("\t+ \" where id =@id \" ;\r\n") ;

sb.Append("\tSqlCommand command = new SqlCommand(strSql,conn) ;\r\n") ;

foreach(DataRow dr in ds.Tables[0].Rows)
{
string strName = dr["name"].ToString() ;
string strSqlType = getSqlDBType((byte)dr["xtype"]) ;
string strShortType = getTypeShort((byte)dr["xtype"]) ;
string strvalueName = strShortType + UpFirstChar(strName) ;
int iLen = (Int16)dr["prec"] ;

string strLen = "" ;
if (strShortType == "str")
strLen = strLen + "," + iLen ;

string strCommandName = "\tcommand.Parameters.Add(\"@" + strName + "\"," + strSqlType + strLen + ") ;\r\n" ;
string strCommandvalue = "\tcommand.Parameters[\"@" + strName + "\"].value = " + strvalueName + " ;\r\n" ;
sb.Append(strCommandName) ;
sb.Append(strCommandvalue) ;
sb.Append("\r\n") ;
}

sb.Append(AddCatchString()) ;

sb.Append("}\r\n") ;
return sb.ToString();
}

4。生成存儲過程的執行方法和返回結果方法。存儲過程的參數也在syscolumns表里有詳細的說明,里面還記錄了每個參數是不是傳出參數,不過在這個函數里我沒有考慮參數的方向,當然,要考慮進去也不是很麻煩。
private string BuildSPExec(DataSet ds)
{
StringBuilder sb = new StringBuilder() ;
string strFuncParam = "" ;

foreach(DataRow dr in ds.Tables[0].Rows)
{
int iType = (byte)dr["xtype"] ;
string strName = UpFirstChar(dr["name"].ToString().TrimStart('@')) ;
string strType = getType(iType) ;
string strSqlType = getSqlDBType(iType) ;
string strShortType = getTypeShort(iType) ;
strFuncParam = strFuncParam + "\r\n\t\t" + strType + " a" + strShortType + strName + ",";
}
strFuncParam = strFuncParam.TrimEnd(',') ;
string strDef = "public bool ExeSP_" + strTableName + "(" + strFuncParam + ")\r\n";
sb.Append(strDef) ;
sb.Append("{\r\n") ;
sb.Append("\tSqlConnection conn = SqlConn.Instance().Connection ;\r\n") ;
sb.Append("\r\n") ;
sb.Append("\tstring strSPName = \"" + strTableName + "\" ;\r\n") ;
sb.Append("\tSqlCommand command = new SqlCommand(strSPName,conn) ;\r\n");
sb.Append("\tcommand.CommandType = CommandType.StoredProcedure ;\r\n") ;
sb.Append("\r\n") ;

foreach(DataRow dr in ds.Tables[0].Rows)
{
int iType = (byte)dr["xtype"] ;
string strParaName = dr["name"].ToString() ;
string strName = UpFirstChar(strParaName.TrimStart('@')) ;
string strSqlType = getSqlDBType(iType) ;
string strShortType = getTypeShort(iType) ;
string strvalue = " a" + strShortType + strName ;
int iLen = (Int16)dr["prec"] ;

string strLen = "" ;
if (strShortType == "str")
strLen = strLen + "," + iLen ;

string strCommandAdd = "\tcommand.Parameters.Add(\"" + strParaName + "\"," + strSqlType + strLen + ") ;\r\n";
string strCommandvalue = "\tcommand.Parameters[\"" + strParaName + "\"].value=" + strvalue + " ;\r\n";
string strCommandNull = "\tcommand.Parameters[\"" + strParaName + "\"].value= DBNull.value ;\r\n";
sb.Append(strCommandAdd) ;
if (strShortType == "dt")
sb.Append("\tif (" + strvalue + "!= DateTime.Minvalue )\r\n\t") ;
else if (strShortType == "str")
sb.Append("\tif (" + strvalue + "!= null )\r\n\t") ;
else if (strShortType == "img")
sb.Append("\tif (" + strvalue + "!= null )\r\n\t") ;
else
sb.Append("") ;
sb.Append(strCommandvalue) ;
if (strShortType == "dt" ||strShortType == "str"||strShortType == "img")
{
sb.Append("\telse\r\n\t") ;
sb.Append(strCommandNull) ;
}
sb.Append("\r\n") ;
}
sb.Append(AddCatchString()) ;

sb.Append("}\r\n") ;
return sb.ToString() ;
}

對于存儲過程生成結果集的函數如下:
private string BuildSPGetData(DataSet ds)
{
StringBuilder sb = new StringBuilder() ;
string strFuncParam = "" ;

foreach(DataRow dr in ds.Tables[0].Rows)
{
int iType = (byte)dr["xtype"] ;
string strName = UpFirstChar(dr["name"].ToString().TrimStart('@')) ;
string strType = getType(iType) ;
string strSqlType = getSqlDBType(iType) ;
string strShortType = getTypeShort(iType) ;
strFuncParam = strFuncParam + "\r\n\t\t" + strType + " a" + strShortType + strName + ",";
}
strFuncParam = strFuncParam.TrimEnd(',') ;
string strDef = "public DataSet QuerySP_" + strTableName + "(" + strFuncParam + ")\r\n";
sb.Append(strDef) ;
sb.Append("{\r\n") ;
sb.Append("\tSqlConnection conn = SqlConn.Instance().Connection ;\r\n") ;
sb.Append("\r\n") ;
sb.Append("\tstring strSPName = \"" + strTableName + "\" ;\r\n") ;
sb.Append("\tSqlCommand command = new SqlCommand(strSPName,conn) ;\r\n");
sb.Append("\tcommand.CommandType = CommandType.StoredProcedure ;\r\n") ;
sb.Append("\r\n") ;

foreach(DataRow dr in ds.Tables[0].Rows)
{
int iType = (byte)dr["xtype"] ;
string strParaName = dr["name"].ToString() ;
string strName = UpFirstChar(strParaName.TrimStart('@')) ;
string strSqlType = getSqlDBType(iType) ;
string strShortType = getTypeShort(iType) ;
string strvalue = " a" + strShortType + strName ;
int iLen = (Int16)dr["prec"] ;

string strLen = "" ;
if (strShortType == "str")
strLen = strLen + "," + iLen ;

string strCommandAdd = "\tcommand.Parameters.Add(\"" + strParaName + "\"," + strSqlType + strLen + ") ;\r\n";
string strCommandvalue = "\tcommand.Parameters[\"" + strParaName + "\"].value=" + strvalue + " ;\r\n";
string strCommandNull = "\tcommand.Parameters[\"" + strParaName + "\"].value= DBNull.value ;\r\n";
sb.Append(strCommandAdd) ;
if (strShortType == "dt")
sb.Append("\tif (" + strvalue + "!= DateTime.Minvalue )\r\n\t") ;
else if (strShortType == "str")
sb.Append("\tif (" + strvalue + "!= null )\r\n\t") ;
else if (strShortType == "img")
sb.Append("\tif (" + strvalue + "!= null )\r\n\t") ;
else
sb.Append("") ;
sb.Append(strCommandvalue) ;
if (strShortType == "dt" ||strShortType == "str"||strShortType == "img")
{
sb.Append("\telse\r\n\t") ;
sb.Append(strCommandNull) ;
}
sb.Append("\r\n") ;
}

sb.Append("\tSqlDataAdapter sdaResult = new SqlDataAdapter(command) ;\r\n") ;
sb.Append("\tDataSet ds = new DataSet() ;\r\n") ;


sb.Append(AddCatchQueryString()) ;

sb.Append("}\r\n") ;
return sb.ToString() ;

}
下面是生成結果集的執行結果:
public DataSet QuerySP_ddms_GetBank(
int aiPrsn_id)
{
SqlConnection conn = SqlConn.Instance().Connection ;

string strSPName = "ddms_GetBank" ;
SqlCommand command = new SqlCommand(strSPName,conn) ;
command.CommandType = CommandType.StoredProcedure ;

command.Parameters.Add("@prsn_id",SqlDbType.Int ) ;
command.Parameters["@prsn_id"].value= aiPrsn_id ;

SqlDataAdapter sdaResult = new SqlDataAdapter(command) ;
DataSet ds = new DataSet() ;
try
{
sdaResult.Fill(ds) ;
}
catch(Exception e)
{
throw(new Exception("Error in the Database"+e.Message)) ;
}
finally
{
sdaResult.Dispose() ;
}
return ds ;
}

還有兩個函數在程序中用到了,如下所示:
private string AddCatchString()
{
StringBuilder sb = new StringBuilder() ;
sb.Append("\ttry\r\n") ;
sb.Append("\t{\r\n") ;
sb.Append("\t\tconn.Open() ;\r\n") ;
sb.Append("\t\tcommand.ExecuteNonQuery() ;\r\n") ;
sb.Append("\t\treturn true ;\r\n") ;
sb.Append("\t}\r\n") ;
sb.Append("\tcatch(Exception e)\r\n") ;
sb.Append("\t{\r\n") ;
sb.Append("\t\tthrow(new Exception(\"Error in the Database\"+e.Message)) ;\r\n") ;
sb.Append("\t}\r\n") ;
sb.Append("\tfinally\r\n") ;
sb.Append("\t{\r\n") ;
sb.Append("\t\tconn.Close() ;\r\n") ;
sb.Append("\t}\r\n") ;
return sb.ToString() ;
}

private string AddCatchQueryString()
{
StringBuilder sb = new StringBuilder() ;
sb.Append("\ttry\r\n") ;
sb.Append("\t{\r\n") ;
sb.Append("\t\tsdaResult.Fill(ds) ;\r\n") ;
sb.Append("\t}\r\n") ;
sb.Append("\tcatch(Exception e)\r\n") ;
sb.Append("\t{\r\n") ;
sb.Append("\t\tthrow(new Exception(\"Error in the Database\"+e.Message)) ;\r\n") ;
sb.Append("\t}\r\n") ;
sb.Append("\tfinally\r\n") ;
sb.Append("\t{\r\n") ;
sb.Append("\t\tsdaResult.Dispose() ;\r\n") ;
sb.Append("\t}\r\n") ;
sb.Append("\treturn ds ;\r\n") ;
return sb.ToString() ;
}

順便說一下,文章開頭的一段代碼就是用這個程序生成的,當然,這種方法還有待完善的地方,希望大家指正。

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

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        九色综合国产一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了| 欧美激情一二三区| 国产不卡免费视频| 亚洲婷婷综合久久一本伊一区| 91网站黄www| 性做久久久久久| 日韩网站在线看片你懂的| 麻豆精品在线视频| 国产精品美女久久福利网站| 欧美唯美清纯偷拍| 国产精品1区2区| 午夜婷婷国产麻豆精品| 国产亚洲污的网站| 欧美精品久久99| 丁香婷婷综合网| 一区二区三区影院| 精品国产青草久久久久福利| 成人手机在线视频| 蜜臀av国产精品久久久久| 中文字幕亚洲一区二区av在线 | 欧美性受xxxx| 国内精品国产成人国产三级粉色| 国产精品福利在线播放| 日韩一级成人av| 色综合久久中文字幕| 精品无人区卡一卡二卡三乱码免费卡| 亚洲欧美视频在线观看| 久久久国产一区二区三区四区小说| 91福利在线看| av亚洲产国偷v产偷v自拍| 久久精品国产久精国产| 亚洲一区中文日韩| 亚洲欧美在线视频| 久久久久久99精品| 日韩欧美一二三区| 911国产精品| 欧美伊人久久久久久久久影院| 高清在线不卡av| 国产一区二区不卡在线| 男女性色大片免费观看一区二区 | 18成人在线观看| 久久综合色婷婷| 制服.丝袜.亚洲.另类.中文| 色94色欧美sute亚洲线路一ni | 色婷婷综合久色| 粉嫩高潮美女一区二区三区| 国产尤物一区二区在线| 精品一区二区三区视频在线观看| 天涯成人国产亚洲精品一区av| 一区二区三区中文字幕精品精品 | 亚洲欧美视频一区| 亚洲伦在线观看| 1000部国产精品成人观看| 国产精品免费久久| 亚洲欧美一区二区三区久本道91 | 亚洲欧洲成人av每日更新| 国产网红主播福利一区二区| 久久久久综合网| 国产精品午夜电影| **网站欧美大片在线观看| 中文字幕亚洲一区二区av在线 | 欧美性高清videossexo| 色一区在线观看| 欧美日韩黄视频| 日韩欧美黄色影院| 国产欧美一区二区三区沐欲| 国产精品无人区| 一区二区三区中文字幕| 亚洲国产日韩一级| 日本不卡视频在线观看| 国产一区二区三区久久悠悠色av | 欧洲亚洲精品在线| 亚洲成人精品一区| 午夜精品久久久| 99久久精品99国产精品| 欧美mv日韩mv| 久久99精品国产.久久久久| 欧美性做爰猛烈叫床潮| 亚洲一卡二卡三卡四卡五卡| 色综合天天综合在线视频| 日本一区二区免费在线| 成人黄色电影在线 | 偷拍与自拍一区| 亚洲一区二区三区四区在线观看| 三级亚洲高清视频| 成人高清免费观看| 色综合天天综合网天天看片| 欧美日韩电影一区| 国产亚洲欧美日韩在线一区| 中文字幕一区二区三区不卡| 亚洲bt欧美bt精品777| 国产精品一区二区三区99| 欧亚洲嫩模精品一区三区| 欧美精品一区视频| 一区二区三区欧美亚洲| 国产麻豆精品视频| 欧美高清激情brazzers| 国产精品视频看| 日本成人超碰在线观看| 99视频一区二区三区| 日韩写真欧美这视频| 亚洲女人的天堂| 国产精品亚洲一区二区三区妖精| 日本精品一区二区三区高清 | 欧美剧情片在线观看| 国产欧美精品一区| 免费成人小视频| 欧美日韩国产电影| 亚洲欧美日韩国产综合在线| 国产麻豆一精品一av一免费 | 亚洲老妇xxxxxx| 国产精品18久久久久久vr| 亚洲一区二区三区免费视频| 高清国产一区二区三区| 欧美老肥妇做.爰bbww视频| 国产三级久久久| 亚洲成人手机在线| 96av麻豆蜜桃一区二区| 久久久www成人免费无遮挡大片| 亚洲国产美国国产综合一区二区| 从欧美一区二区三区| 欧美成人伊人久久综合网| 亚洲高清在线精品| 色综合久久久网| 中文字幕日韩av资源站| 丁香另类激情小说| 国产日韩三级在线| 国产福利91精品一区| 亚洲影院理伦片| 国产91精品欧美| 日韩欧美电影一二三| 免费成人小视频| 日韩一二在线观看| 麻豆精品久久精品色综合| 欧美精品欧美精品系列| 精品三级在线观看| 亚洲综合激情小说| 91国偷自产一区二区三区观看| 亚洲欧洲av另类| 91九色02白丝porn| 亚洲自拍偷拍欧美| 欧美一区二区精品| 久久国产精品一区二区| 久久综合久久综合亚洲| 高清国产一区二区| 亚洲摸摸操操av| 欧美日韩视频不卡| 久久爱另类一区二区小说| 精品国精品国产| 成人动漫一区二区三区| 亚洲精品日韩专区silk | 亚洲影视在线播放| 欧美一级高清片在线观看| 国产一区二区三区四区五区美女 | 一区二区在线观看视频在线观看| 色综合网色综合| 亚洲6080在线| 91精品国产欧美一区二区成人| 午夜久久电影网| 久久综合九色综合97婷婷| 99国产精品99久久久久久| 亚洲图片欧美一区| 精品久久久久香蕉网| 99视频精品全部免费在线| 日本aⅴ亚洲精品中文乱码| 中文字幕免费一区| 91精品啪在线观看国产60岁| 国产91富婆露脸刺激对白| 香蕉影视欧美成人| 国产精品久久久久9999吃药| 极品少妇xxxx精品少妇| 日韩av一区二| 国产成人精品亚洲日本在线桃色| 欧美国产精品v| 欧美喷水一区二区| 国产凹凸在线观看一区二区| 亚洲图片有声小说| 日本一区二区三区视频视频| 欧美三片在线视频观看 | 久久国产精品72免费观看| 亚洲欧美福利一区二区| 欧美mv和日韩mv的网站| 色94色欧美sute亚洲线路二 | 日本二三区不卡| 国产尤物一区二区在线| 日韩精品一二三四| 亚洲永久精品大片| 亚洲欧美一区二区在线观看| www国产亚洲精品久久麻豆| 欧美日韩国产综合久久| 91美女在线视频| 99视频在线观看一区三区| 欧美一区二区三区在线看| va亚洲va日韩不卡在线观看| 亚洲高清免费观看高清完整版在线观看 | 色噜噜偷拍精品综合在线| 国产剧情一区在线| 久久精品国产亚洲a| 美女视频网站黄色亚洲|